@deeksha2309/sunbird-collection-editor 8.0.7
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/README.md +24 -0
- package/esm2022/lib/collection-editor-cursor.service.mjs +3 -0
- package/esm2022/lib/collection-editor-library.component.mjs +16 -0
- package/esm2022/lib/collection-editor-library.module.mjs +137 -0
- package/esm2022/lib/components/answer/answer.component.mjs +43 -0
- package/esm2022/lib/components/asset-browser/asset-browser.component.mjs +325 -0
- package/esm2022/lib/components/asset-browser/asset-browser.data.mjs +53 -0
- package/esm2022/lib/components/assign-page-number/assign-page-number.component.mjs +191 -0
- package/esm2022/lib/components/ckeditor-tool/ckeditor-tool.component.mjs +895 -0
- package/esm2022/lib/components/collection-icon/collection-icon.component.mjs +43 -0
- package/esm2022/lib/components/contentplayer-page/contentplayer-page.component.mjs +351 -0
- package/esm2022/lib/components/csv-upload/csv-upload.component.mjs +178 -0
- package/esm2022/lib/components/dialcode/dialcode.component.mjs +182 -0
- package/esm2022/lib/components/editor/editor.component.mjs +1125 -0
- package/esm2022/lib/components/fancy-tree/fancy-tree.component.mjs +529 -0
- package/esm2022/lib/components/header/header.component.mjs +123 -0
- package/esm2022/lib/components/library/library.component.mjs +242 -0
- package/esm2022/lib/components/library-filter/library-filter.component.mjs +149 -0
- package/esm2022/lib/components/library-list/library-list.component.mjs +92 -0
- package/esm2022/lib/components/library-player/library-player.component.mjs +62 -0
- package/esm2022/lib/components/manage-collaborator/manage-collaborator.component.mjs +256 -0
- package/esm2022/lib/components/meta-form/meta-form.component.mjs +377 -0
- package/esm2022/lib/components/options/options.component.mjs +144 -0
- package/esm2022/lib/components/plain-tree/plain-tree.component.mjs +125 -0
- package/esm2022/lib/components/progress-status/progress-status.component.mjs +46 -0
- package/esm2022/lib/components/publish-checklist/publish-checklist.component.mjs +67 -0
- package/esm2022/lib/components/quality-params-modal/quality-params-modal.component.mjs +52 -0
- package/esm2022/lib/components/question/question.component.mjs +1360 -0
- package/esm2022/lib/components/quml-player/quml-player.component.mjs +73 -0
- package/esm2022/lib/components/qumlplayer-page/qumlplayer-page.component.mjs +84 -0
- package/esm2022/lib/components/resource-reorder/resource-reorder.component.mjs +143 -0
- package/esm2022/lib/components/skeleton-loader/skeleton-loader.component.mjs +26 -0
- package/esm2022/lib/components/template/template.component.mjs +42 -0
- package/esm2022/lib/components/term-and-condition/term-and-condition.component.mjs +68 -0
- package/esm2022/lib/directives/telemetry-interact/telemetry-interact.directive.mjs +33 -0
- package/esm2022/lib/interfaces/McqForm.mjs +29 -0
- package/esm2022/lib/interfaces/editor.mjs +2 -0
- package/esm2022/lib/interfaces/framework.mjs +2 -0
- package/esm2022/lib/interfaces/httpOptions.mjs +2 -0
- package/esm2022/lib/interfaces/requestParam.mjs +2 -0
- package/esm2022/lib/interfaces/serverResponse.mjs +2 -0
- package/esm2022/lib/pipes/sanitize-html.pipe.mjs +20 -0
- package/esm2022/lib/services/config/category.config.json +8 -0
- package/esm2022/lib/services/config/config.service.mjs +27 -0
- package/esm2022/lib/services/config/editor.config.json +31 -0
- package/esm2022/lib/services/config/label.config.json +314 -0
- package/esm2022/lib/services/config/player.config.json +96 -0
- package/esm2022/lib/services/config/url.config.json +69 -0
- package/esm2022/lib/services/data/data.service.mjs +192 -0
- package/esm2022/lib/services/dialcode/dialcode.service.mjs +309 -0
- package/esm2022/lib/services/editor/editor.service.mjs +682 -0
- package/esm2022/lib/services/framework/framework.service.mjs +106 -0
- package/esm2022/lib/services/helper/helper.service.mjs +160 -0
- package/esm2022/lib/services/player/player.service.mjs +99 -0
- package/esm2022/lib/services/public-data/public-data.service.mjs +21 -0
- package/esm2022/lib/services/question/question.service.mjs +167 -0
- package/esm2022/lib/services/telemetry/telemetry.service.mjs +120 -0
- package/esm2022/lib/services/toaster/toaster.service.mjs +105 -0
- package/esm2022/lib/services/tree/tree.service.mjs +284 -0
- package/esm2022/project-sunbird-sunbird-collection-editor.mjs +5 -0
- package/esm2022/public-api.mjs +4 -0
- package/fesm2022/project-sunbird-sunbird-collection-editor.mjs +10138 -0
- package/fesm2022/project-sunbird-sunbird-collection-editor.mjs.map +1 -0
- package/index.d.ts +6 -0
- package/lib/assets/.gitkeep +0 -0
- package/lib/assets/images/MCQ.png +0 -0
- package/lib/assets/images/Spin.gif +0 -0
- package/lib/assets/images/bulkuploadfile.png +0 -0
- package/lib/assets/images/cancel-sign copy.png +0 -0
- package/lib/assets/images/cancel-sign.png +0 -0
- package/lib/assets/images/emptyResult.svg +1 -0
- package/lib/assets/images/icons-rtl.gif +0 -0
- package/lib/assets/images/icons.gif +0 -0
- package/lib/assets/images/imageicon.svg +16 -0
- package/lib/assets/images/imageicon_blue.svg +16 -0
- package/lib/assets/images/layoutoneicon.svg +16 -0
- package/lib/assets/images/layoutoneicon_blue.svg +16 -0
- package/lib/assets/images/layoutthreeicon.svg +18 -0
- package/lib/assets/images/layoutthreeicon_blue.svg +18 -0
- package/lib/assets/images/layouttwoicon.svg +18 -0
- package/lib/assets/images/layouttwoicon_blue.svg +18 -0
- package/lib/assets/images/leftalignicon.svg +17 -0
- package/lib/assets/images/leftalignicon_blue.svg +17 -0
- package/lib/assets/images/loader.gif +0 -0
- package/lib/assets/images/loader.svg +1 -0
- package/lib/assets/images/loading.gif +0 -0
- package/lib/assets/images/middlealignicon.svg +17 -0
- package/lib/assets/images/middlealignicon_blue.svg +17 -0
- package/lib/assets/images/question_collection.svg +18 -0
- package/lib/assets/images/rightalignicon.svg +17 -0
- package/lib/assets/images/rightalignicon_blue.svg +17 -0
- package/lib/assets/images/vline-rtl.gif +0 -0
- package/lib/assets/images/vline.gif +0 -0
- package/lib/assets/images/writing.png +0 -0
- package/lib/collection-editor-cursor.service.d.ts +5 -0
- package/lib/collection-editor-cursor.service.d.ts.map +1 -0
- package/lib/collection-editor-library.component.d.ts +9 -0
- package/lib/collection-editor-library.component.d.ts.map +1 -0
- package/lib/collection-editor-library.module.d.ts +50 -0
- package/lib/collection-editor-library.module.d.ts.map +1 -0
- package/lib/components/answer/answer.component.d.ts +24 -0
- package/lib/components/answer/answer.component.d.ts.map +1 -0
- package/lib/components/asset-browser/asset-browser.component.d.ts +81 -0
- package/lib/components/asset-browser/asset-browser.component.d.ts.map +1 -0
- package/lib/components/asset-browser/asset-browser.data.d.ts +52 -0
- package/lib/components/asset-browser/asset-browser.data.d.ts.map +1 -0
- package/lib/components/assign-page-number/assign-page-number.component.d.ts +38 -0
- package/lib/components/assign-page-number/assign-page-number.component.d.ts.map +1 -0
- package/lib/components/ckeditor-tool/ckeditor-tool.component.d.ts +161 -0
- package/lib/components/ckeditor-tool/ckeditor-tool.component.d.ts.map +1 -0
- package/lib/components/collection-icon/collection-icon.component.d.ts +18 -0
- package/lib/components/collection-icon/collection-icon.component.d.ts.map +1 -0
- package/lib/components/contentplayer-page/contentplayer-page.component.d.ts +54 -0
- package/lib/components/contentplayer-page/contentplayer-page.component.d.ts.map +1 -0
- package/lib/components/csv-upload/csv-upload.component.d.ts +42 -0
- package/lib/components/csv-upload/csv-upload.component.d.ts.map +1 -0
- package/lib/components/dialcode/dialcode.component.d.ts +48 -0
- package/lib/components/dialcode/dialcode.component.d.ts.map +1 -0
- package/lib/components/editor/editor.component.d.ts +146 -0
- package/lib/components/editor/editor.component.d.ts.map +1 -0
- package/lib/components/fancy-tree/fancy-tree.component.d.ts +77 -0
- package/lib/components/fancy-tree/fancy-tree.component.d.ts.map +1 -0
- package/lib/components/header/header.component.d.ts +46 -0
- package/lib/components/header/header.component.d.ts.map +1 -0
- package/lib/components/library/library.component.d.ts +69 -0
- package/lib/components/library/library.component.d.ts.map +1 -0
- package/lib/components/library-filter/library-filter.component.d.ts +47 -0
- package/lib/components/library-filter/library-filter.component.d.ts.map +1 -0
- package/lib/components/library-list/library-list.component.d.ts +32 -0
- package/lib/components/library-list/library-list.component.d.ts.map +1 -0
- package/lib/components/library-player/library-player.component.d.ts +24 -0
- package/lib/components/library-player/library-player.component.d.ts.map +1 -0
- package/lib/components/manage-collaborator/manage-collaborator.component.d.ts +75 -0
- package/lib/components/manage-collaborator/manage-collaborator.component.d.ts.map +1 -0
- package/lib/components/meta-form/meta-form.component.d.ts +51 -0
- package/lib/components/meta-form/meta-form.component.d.ts.map +1 -0
- package/lib/components/options/options.component.d.ts +53 -0
- package/lib/components/options/options.component.d.ts.map +1 -0
- package/lib/components/plain-tree/plain-tree.component.d.ts +20 -0
- package/lib/components/plain-tree/plain-tree.component.d.ts.map +1 -0
- package/lib/components/progress-status/progress-status.component.d.ts +25 -0
- package/lib/components/progress-status/progress-status.component.d.ts.map +1 -0
- package/lib/components/publish-checklist/publish-checklist.component.d.ts +23 -0
- package/lib/components/publish-checklist/publish-checklist.component.d.ts.map +1 -0
- package/lib/components/quality-params-modal/quality-params-modal.component.d.ts +24 -0
- package/lib/components/quality-params-modal/quality-params-modal.component.d.ts.map +1 -0
- package/lib/components/question/question.component.d.ts +215 -0
- package/lib/components/question/question.component.d.ts.map +1 -0
- package/lib/components/quml-player/quml-player.component.d.ts +26 -0
- package/lib/components/quml-player/quml-player.component.d.ts.map +1 -0
- package/lib/components/qumlplayer-page/qumlplayer-page.component.d.ts +31 -0
- package/lib/components/qumlplayer-page/qumlplayer-page.component.d.ts.map +1 -0
- package/lib/components/resource-reorder/resource-reorder.component.d.ts +45 -0
- package/lib/components/resource-reorder/resource-reorder.component.d.ts.map +1 -0
- package/lib/components/skeleton-loader/skeleton-loader.component.d.ts +13 -0
- package/lib/components/skeleton-loader/skeleton-loader.component.d.ts.map +1 -0
- package/lib/components/template/template.component.d.ts +21 -0
- package/lib/components/template/template.component.d.ts.map +1 -0
- package/lib/components/term-and-condition/term-and-condition.component.d.ts +26 -0
- package/lib/components/term-and-condition/term-and-condition.component.d.ts.map +1 -0
- package/lib/directives/telemetry-interact/telemetry-interact.directive.d.ts +27 -0
- package/lib/directives/telemetry-interact/telemetry-interact.directive.d.ts.map +1 -0
- package/lib/interfaces/McqForm.d.ts +32 -0
- package/lib/interfaces/McqForm.d.ts.map +1 -0
- package/lib/interfaces/editor.d.ts +78 -0
- package/lib/interfaces/editor.d.ts.map +1 -0
- package/lib/interfaces/framework.d.ts +46 -0
- package/lib/interfaces/framework.d.ts.map +1 -0
- package/lib/interfaces/httpOptions.d.ts +35 -0
- package/lib/interfaces/httpOptions.d.ts.map +1 -0
- package/lib/interfaces/requestParam.d.ts +24 -0
- package/lib/interfaces/requestParam.d.ts.map +1 -0
- package/lib/interfaces/serverResponse.d.ts +38 -0
- package/lib/interfaces/serverResponse.d.ts.map +1 -0
- package/lib/pipes/sanitize-html.pipe.d.ts +11 -0
- package/lib/pipes/sanitize-html.pipe.d.ts.map +1 -0
- package/lib/services/config/config.service.d.ts +13 -0
- package/lib/services/config/config.service.d.ts.map +1 -0
- package/lib/services/data/data.service.d.ts +85 -0
- package/lib/services/data/data.service.d.ts.map +1 -0
- package/lib/services/dialcode/dialcode.service.d.ts +36 -0
- package/lib/services/dialcode/dialcode.service.d.ts.map +1 -0
- package/lib/services/editor/editor.service.d.ts +150 -0
- package/lib/services/editor/editor.service.d.ts.map +1 -0
- package/lib/services/framework/framework.service.d.ts +35 -0
- package/lib/services/framework/framework.service.d.ts.map +1 -0
- package/lib/services/helper/helper.service.d.ts +41 -0
- package/lib/services/helper/helper.service.d.ts.map +1 -0
- package/lib/services/player/player.service.d.ts +33 -0
- package/lib/services/player/player.service.d.ts.map +1 -0
- package/lib/services/public-data/public-data.service.d.ts +15 -0
- package/lib/services/public-data/public-data.service.d.ts.map +1 -0
- package/lib/services/question/question.service.d.ts +30 -0
- package/lib/services/question/question.service.d.ts.map +1 -0
- package/lib/services/telemetry/telemetry.service.d.ts +45 -0
- package/lib/services/telemetry/telemetry.service.d.ts.map +1 -0
- package/lib/services/toaster/toaster.service.d.ts +50 -0
- package/lib/services/toaster/toaster.service.d.ts.map +1 -0
- package/lib/services/tree/tree.service.d.ts +51 -0
- package/lib/services/tree/tree.service.d.ts.map +1 -0
- package/package.json +32 -0
- package/project-sunbird-sunbird-collection-editor.d.ts.map +1 -0
- package/public-api.d.ts +4 -0
- package/public-api.d.ts.map +1 -0
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
import { Component, EventEmitter, Input, Output, ViewEncapsulation } from '@angular/core';
|
|
2
|
+
import * as _ from 'lodash-es';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "../../services/telemetry/telemetry.service";
|
|
5
|
+
import * as i2 from "../../services/editor/editor.service";
|
|
6
|
+
import * as i3 from "@angular/router";
|
|
7
|
+
import * as i4 from "../../services/tree/tree.service";
|
|
8
|
+
import * as i5 from "../../services/toaster/toaster.service";
|
|
9
|
+
import * as i6 from "../../services/config/config.service";
|
|
10
|
+
import * as i7 from "../../services/helper/helper.service";
|
|
11
|
+
import * as i8 from "@angular/common";
|
|
12
|
+
import * as i9 from "../library-filter/library-filter.component";
|
|
13
|
+
import * as i10 from "../library-list/library-list.component";
|
|
14
|
+
import * as i11 from "../library-player/library-player.component";
|
|
15
|
+
import * as i12 from "../resource-reorder/resource-reorder.component";
|
|
16
|
+
import * as i13 from "../skeleton-loader/skeleton-loader.component";
|
|
17
|
+
import * as i14 from "../../directives/telemetry-interact/telemetry-interact.directive";
|
|
18
|
+
export class LibraryComponent {
|
|
19
|
+
constructor(telemetryService, editorService, router, treeService, toasterService, configService, helperService) {
|
|
20
|
+
this.telemetryService = telemetryService;
|
|
21
|
+
this.editorService = editorService;
|
|
22
|
+
this.router = router;
|
|
23
|
+
this.treeService = treeService;
|
|
24
|
+
this.toasterService = toasterService;
|
|
25
|
+
this.configService = configService;
|
|
26
|
+
this.helperService = helperService;
|
|
27
|
+
this.libraryEmitter = new EventEmitter();
|
|
28
|
+
this.pageId = 'add_from_library';
|
|
29
|
+
this.showSelectResourceModal = false;
|
|
30
|
+
this.collectionHierarchy = [];
|
|
31
|
+
this.showAddedContent = false;
|
|
32
|
+
this.showLoader = true;
|
|
33
|
+
this.isFilterOpen = false;
|
|
34
|
+
this.pageStartTime = Date.now();
|
|
35
|
+
}
|
|
36
|
+
ngOnInit() {
|
|
37
|
+
const activeNode = this.treeService.getActiveNode();
|
|
38
|
+
this.selectedUnit = _.get(activeNode, 'data.id');
|
|
39
|
+
this.collectionId = _.get(this.libraryInput, 'collectionId');
|
|
40
|
+
this.searchFormConfig = _.get(this.libraryInput, 'searchFormConfig');
|
|
41
|
+
this.editorService.fetchCollectionHierarchy(this.collectionId).subscribe((response) => {
|
|
42
|
+
this.collectionhierarcyData = response.result.content;
|
|
43
|
+
this.collectionHierarchy = this.getUnitWithChildren(this.collectionhierarcyData, this.collectionId);
|
|
44
|
+
if (_.has(this.collectionhierarcyData, 'targetFWIds')) {
|
|
45
|
+
this.frameworkId = _.first(_.castArray(this.collectionhierarcyData.targetFWIds));
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
this.frameworkId = _.first(_.castArray(this.collectionhierarcyData.framework));
|
|
49
|
+
}
|
|
50
|
+
this.setDefaultFilters();
|
|
51
|
+
this.fetchContentList();
|
|
52
|
+
this.telemetryService.telemetryPageId = this.pageId;
|
|
53
|
+
this.childNodes = _.get(this.collectionhierarcyData, 'childNodes');
|
|
54
|
+
}, err => {
|
|
55
|
+
this.toasterService.error(_.get(this.configService, 'labelConfig.messages.error.001'));
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
ngAfterViewInit() {
|
|
59
|
+
this.telemetryService.impression({
|
|
60
|
+
type: 'edit', pageid: this.telemetryService.telemetryPageId, uri: this.router.url,
|
|
61
|
+
duration: (Date.now() - this.pageStartTime) / 1000
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
back() {
|
|
65
|
+
this.libraryEmitter.emit({});
|
|
66
|
+
this.editorService.contentsCountAddedInLibraryPage(true); // contents count updated from library page to zero
|
|
67
|
+
}
|
|
68
|
+
onFilterChange(event) {
|
|
69
|
+
switch (event.action) {
|
|
70
|
+
case 'filterDataChange':
|
|
71
|
+
this.fetchContentList(event.filters, event.query);
|
|
72
|
+
break;
|
|
73
|
+
case 'filterStatusChange':
|
|
74
|
+
this.isFilterOpen = event.filterStatus;
|
|
75
|
+
break;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
setDefaultFilters() {
|
|
79
|
+
const selectedNode = this.treeService.getActiveNode();
|
|
80
|
+
let contentTypes = _.flatten(_.map(_.get(this.editorService.editorConfig.config, `hierarchy.level${selectedNode.getLevel() - 1}.children`), (val) => {
|
|
81
|
+
return val;
|
|
82
|
+
}));
|
|
83
|
+
if (_.isEmpty(contentTypes)) {
|
|
84
|
+
contentTypes = _.map(this.helperService.contentPrimaryCategories, 'name');
|
|
85
|
+
}
|
|
86
|
+
this.defaultFilters = _.pickBy({
|
|
87
|
+
primaryCategory: contentTypes
|
|
88
|
+
// board: [_.get(this.collectionhierarcyData, 'board')] || _.get(this.collectionhierarcyData, 'boardIds'),
|
|
89
|
+
// gradeLevel: _.get(this.collectionhierarcyData, 'gradeLevel') || _.get(this.collectionhierarcyData, 'gradeLevelIds'),
|
|
90
|
+
// medium: _.get(this.collectionhierarcyData, 'medium') || _.get(this.collectionhierarcyData, 'mediumIds'),
|
|
91
|
+
// subject: _.get(this.collectionhierarcyData, 'subject') || _.get(this.collectionhierarcyData, 'subjectIds'),
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
fetchContentList(filters, query) {
|
|
95
|
+
filters = filters || this.defaultFilters;
|
|
96
|
+
const channel = _.get(this.editorService.editorConfig, 'context.channel');
|
|
97
|
+
const option = {
|
|
98
|
+
url: 'composite/v3/search',
|
|
99
|
+
data: {
|
|
100
|
+
request: {
|
|
101
|
+
query: query || '',
|
|
102
|
+
filters: _.pickBy({ ...filters, ...{ status: ['Live'], channel } }),
|
|
103
|
+
sort_by: {
|
|
104
|
+
lastUpdatedOn: 'desc'
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
};
|
|
109
|
+
this.editorService.fetchContentListDetails(option).subscribe((response) => {
|
|
110
|
+
this.showLoader = false;
|
|
111
|
+
if (!(_.get(response, 'result.count'))) {
|
|
112
|
+
this.contentList = [];
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
this.contentList = _.compact(_.concat(_.get(response.result, 'content'), _.get(response.result, 'QuestionSet')));
|
|
116
|
+
this.filterContentList();
|
|
117
|
+
}
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
getUnitWithChildren(data, collectionId, level) {
|
|
121
|
+
const self = this;
|
|
122
|
+
const childData = data.children;
|
|
123
|
+
if (_.isEmpty(childData)) {
|
|
124
|
+
return [];
|
|
125
|
+
}
|
|
126
|
+
data.level = level ? (level + 1) : 1;
|
|
127
|
+
const tree = childData.map(child => {
|
|
128
|
+
const treeItem = this.generateNodeMeta(child);
|
|
129
|
+
// tslint:disable-next-line:max-line-length
|
|
130
|
+
treeItem.showButton = _.isEmpty(_.get(this.editorService.editorConfig, `config.hierarchy.level${data.level}.children`)) ? true : false;
|
|
131
|
+
const treeUnit = self.getUnitWithChildren(child, collectionId, data.level);
|
|
132
|
+
const treeChildren = treeUnit && treeUnit.filter(item => {
|
|
133
|
+
return item.visibility === 'Parent' && item.mimeType === 'application/vnd.ekstep.content-collection';
|
|
134
|
+
}); // TODO: rethink this : need to check for questionSet
|
|
135
|
+
treeItem.children = (treeChildren && treeChildren.length > 0) ? treeChildren : null;
|
|
136
|
+
return treeItem;
|
|
137
|
+
});
|
|
138
|
+
return tree;
|
|
139
|
+
}
|
|
140
|
+
generateNodeMeta(node) {
|
|
141
|
+
const nodeMeta = {
|
|
142
|
+
identifier: node.identifier,
|
|
143
|
+
name: node.name,
|
|
144
|
+
contentType: node.contentType,
|
|
145
|
+
topic: node.topic,
|
|
146
|
+
status: node.status,
|
|
147
|
+
creator: node.creator,
|
|
148
|
+
createdBy: node.createdBy || null,
|
|
149
|
+
parentId: node.parent || null,
|
|
150
|
+
organisationId: _.has(node, 'organisationId') ? node.organisationId : null,
|
|
151
|
+
prevStatus: node.prevStatus || null,
|
|
152
|
+
visibility: node.visibility,
|
|
153
|
+
mimeType: node.mimeType
|
|
154
|
+
};
|
|
155
|
+
return nodeMeta;
|
|
156
|
+
}
|
|
157
|
+
onContentChangeEvent(event) {
|
|
158
|
+
this.selectedContent = event.content;
|
|
159
|
+
}
|
|
160
|
+
showResourceTemplate(event) {
|
|
161
|
+
switch (event.action) {
|
|
162
|
+
case 'showFilter':
|
|
163
|
+
this.openFilter();
|
|
164
|
+
break;
|
|
165
|
+
case 'openHierarchyPopup':
|
|
166
|
+
this.showSelectResourceModal = true;
|
|
167
|
+
break;
|
|
168
|
+
case 'closeHierarchyPopup':
|
|
169
|
+
this.showSelectResourceModal = false;
|
|
170
|
+
break;
|
|
171
|
+
case 'showAddedContent':
|
|
172
|
+
this.showAddedContent = event.status;
|
|
173
|
+
this.filterContentList();
|
|
174
|
+
break;
|
|
175
|
+
case 'contentAdded':
|
|
176
|
+
this.childNodes.push(event.data.identifier);
|
|
177
|
+
this.getHierarchyData();
|
|
178
|
+
this.editorService.contentsCountAddedInLibraryPage(); // contents count added from library page
|
|
179
|
+
this.filterContentList(true);
|
|
180
|
+
break;
|
|
181
|
+
case 'sortContentList':
|
|
182
|
+
this.sortContentList(event.status);
|
|
183
|
+
break;
|
|
184
|
+
default:
|
|
185
|
+
break;
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
getHierarchyData() {
|
|
189
|
+
this.editorService.fetchCollectionHierarchy(this.collectionId).subscribe((response) => {
|
|
190
|
+
this.collectionhierarcyData = response.result.content;
|
|
191
|
+
}, err => {
|
|
192
|
+
this.toasterService.error(_.get(this.configService, 'labelConfig.messages.error.001'));
|
|
193
|
+
});
|
|
194
|
+
}
|
|
195
|
+
sortContentList(status) {
|
|
196
|
+
this.contentList = this.contentList.sort((a, b) => {
|
|
197
|
+
return this.editorService.sort(status ? b : a, status ? a : b, status ? 'name' : 'lastUpdatedOn');
|
|
198
|
+
});
|
|
199
|
+
const selectedContentIndex = this.showAddedContent ? 0 : _.findIndex(this.contentList, { isAdded: false });
|
|
200
|
+
this.selectedContent = this.contentList[selectedContentIndex];
|
|
201
|
+
}
|
|
202
|
+
openFilter() {
|
|
203
|
+
window.scrollTo({
|
|
204
|
+
top: 0,
|
|
205
|
+
left: 0,
|
|
206
|
+
behavior: 'smooth'
|
|
207
|
+
});
|
|
208
|
+
this.isFilterOpen = true;
|
|
209
|
+
}
|
|
210
|
+
filterContentList(isContentAdded) {
|
|
211
|
+
if (_.isEmpty(this.contentList)) {
|
|
212
|
+
return;
|
|
213
|
+
}
|
|
214
|
+
_.forEach(this.contentList, (value, key) => {
|
|
215
|
+
if (value) {
|
|
216
|
+
value.isAdded = _.includes(this.childNodes, value.identifier);
|
|
217
|
+
}
|
|
218
|
+
});
|
|
219
|
+
if (!isContentAdded) {
|
|
220
|
+
let selectedContentIndex = this.showAddedContent ? 0 : _.findIndex(this.contentList, { isAdded: false });
|
|
221
|
+
if (this.contentList.length === 1 && this.contentList[0]['isAdded'] === true) {
|
|
222
|
+
this.showAddedContent = true;
|
|
223
|
+
selectedContentIndex = 0;
|
|
224
|
+
}
|
|
225
|
+
this.selectedContent = this.contentList[selectedContentIndex];
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
ngOnDestroy() {
|
|
229
|
+
this.editorService.contentsCountAddedInLibraryPage(true); // contents count updated from library page to zero
|
|
230
|
+
}
|
|
231
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: LibraryComponent, deps: [{ token: i1.EditorTelemetryService }, { token: i2.EditorService }, { token: i3.Router }, { token: i4.TreeService }, { token: i5.ToasterService }, { token: i6.ConfigService }, { token: i7.HelperService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
232
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: LibraryComponent, selector: "lib-library", inputs: { libraryInput: "libraryInput" }, outputs: { libraryEmitter: "libraryEmitter" }, ngImport: i0, template: "<div class=\"add-to-library mb-0\">\n <!-- Blue Header -->\n <div class=\"sb-bg-color-primary add-to-library__header\">\n <div class=\"ui container sb-container relative position\">\n <div class=\"d-flex flex-ai-center\">\n <button class=\"sb-btn sb-btn-primary sb-btn-xs back-btn px-0\" libTelemetryInteract\n [telemetryInteractEdata]=\"telemetryService.getTelemetryInteractEdata('back','click','launch', telemetryService?.telemetryPageId)\"(click)=\"back();\"><i class=\"arrow left icon fs-1\"></i></button>\n <div class=\"ml-8 sb-color-white\">\n <div class=\"d-flex flex-ai-center fsmall\">\n <div class=\"font-weight-bold fs-1-16\">{{configService.labelConfig?.lbl?.addFromLibrary}}</div>\n <!-- <div class=\"sb-border-vertical mx-15\"></div>\n <div class=\"flex flex-wrap\">\n <h5>Chapter 1</h5>\n <span>Science</span><span class=\"add-to-library-dot\"></span><span>Class 10</span><span\n class=\"add-to-library-dot\"></span><span>DP-1205</span>\n </div> -->\n </div>\n </div>\n </div>\n </div>\n </div>\n<!-- Filter -->\n <lib-library-filter *ngIf=\"!showLoader\" [filterValues]=\"defaultFilters\" [searchFormConfig]=\"searchFormConfig\" [filterOpenStatus]=\"isFilterOpen\" [frameworkId]=\"frameworkId\" (filterChangeEvent)=\"onFilterChange($event);\"></lib-library-filter>\n <div class=\"ui container sb-container min-h-500\" *ngIf=\"!showLoader && contentList?.length\">\n <!-- Player Section -->\n <div class=\"sb-g add-to-library__toc-player\">\n <!-- Left Sidebar for cards -->\n <section class=\"sb-g-col-xs-12 sb-g-col-md-4 sb-g-col-lg-4\">\n <lib-library-list (contentChangeEvent)= \"onContentChangeEvent($event)\" [selectedContent] = \"selectedContent\"[contentList]=\"contentList\" [showAddedContent]=\"showAddedContent\" (moveEvent)=\"showResourceTemplate($event)\"></lib-library-list>\n </section>\n <!-- Right Player Sections -->\n <section class=\"sb-g-col-xs-12 sb-g-col-md-8 sb-g-col-lg-8 relative position ml-24\">\n <lib-library-player [contentListDetails]=\"selectedContent\" (moveEvent)=\"showResourceTemplate($event)\"></lib-library-player>\n </section>\n </div>\n </div>\n</div>\n<div class=\"result-no-found\">\n <div class=\"ui container sb-container\" *ngIf=\"showLoader\">\n <div class=\"sb-g add-to-library__toc-player ml-30\">\n <!-- Left Sidebar for cards -->\n <section class=\"sb-g-col-xs-12 sb-g-col-md-4 sb-g-col-lg-4\">\n <div class=\"sbtoc-container pr-8 mt-20\">\n <div class=\"sbaccordion__panel-content p-16 mb-8 sb-dock-skeleton-bx\">\n <div class=\"sbchapter__item\" *ngFor=\"let number of [].constructor(4)\">\n <lib-skeleton-loader [width]=\"'90%'\" [height]=\"'12px'\" class=\"sb-dock-flex-auto\"></lib-skeleton-loader>\n <div>\n <lib-skeleton-loader [width]=\"'30%'\" [height]=\"'12px'\" class=\"sb-dock-flex-auto\"></lib-skeleton-loader>\n </div>\n </div>\n </div>\n </div>\n </section>\n </div>\n </div>\n</div>\n<div *ngIf=\"showSelectResourceModal\">\n <lib-resource-reorder [prevUnitSelect]= \"selectedUnit\" [collectionhierarcyData]=\"collectionhierarcyData\" [collectionUnits]=\"collectionHierarchy\" [selectedContentDetails]=\"selectedContent\" [collectionId]=\"collectionId\" (moveEvent)=\"showResourceTemplate($event)\"></lib-resource-reorder>\n</div>\n\n<!--empty result -->\n<div class=\"result-no-found\">\n <div class=\"ui container sb-container\" *ngIf=\"!showLoader && !contentList?.length\">\n <div class=\"add-to-library__no-result\">\n <h5 class=\"font-weight-bold\">{{configService.labelConfig?.lbl?.noMatchingContent}}</h5>\n <img alt=\"No Content available\" class=\"mt-16\" src=\"assets/images/emptyResult.svg\">\n <h6 class=\"sb-color-gray-300 font-weight-normal mt-8\">{{configService.labelConfig?.lbl?.changeFilterMessage}}</h6>\n <button class=\"sb-btn sb-btn-secondary sb-btn-normal mt-16\" libTelemetryInteract\n [telemetryInteractEdata]=\"telemetryService.getTelemetryInteractEdata('change_filter','click','launch', telemetryService?.telemetryPageId)\" (click)=\"openFilter();\">{{configService.labelConfig?.lbl?.changeFilter}}</button>\n </div>\n </div>\n</div>", styles: [".add-to-library__header{height:55px;line-height:50px}.add-to-library__no-result{display:flex;flex-direction:column;align-items:center;padding:5.5rem 0 0;width:20rem;text-align:center;margin:0 auto}.sb-dock-skeleton-bx{border-top:.0625rem solid #e0e0e0;background:var(--gray-0);min-height:2rem;overflow:hidden;overflow-y:auto;box-shadow:#0000001a}.sb-dock-flex-auto{flex:1 1 auto}.sb-dock-width-auto{width:auto}.sbchapter{border-bottom:calculateRem(1px) solid #ddd;padding:calculateRem(16px) calculateRem(16px) calculateRem(8px) calculateRem(16px)}.sbchapter h4{font-size:10px;line-height:normal;color:var(--gray-800);margin-bottom:calculateRem(8px)}.sbchapter .textbookBtnLink{visibility:hidden}.sbchapter__item{background:var(--white);border:calculateRem(1px) solid #ddd;box-shadow:0 calculateRem(3px) calculateRem(4px) 0 #024f9d1a;display:flex;align-items:flex-start;justify-content:space-between;margin-bottom:.5rem;padding:.5rem;cursor:pointer;min-height:3.2rem;position:relative}.sbchapter__item.active{background:var(--secondary-300);border:.0625rem solid var(--gray-100);border-bottom:0}.sbchapter__item.active.active:last-child{border-bottom:.0625rem solid var(--gray-100)}.sbchapter__item.active .textbookBtnLink{visibility:visible;right:12px}.sbchapter__item.active .textbookBtnLink .sb-btn-link{border-color:var(--secondary-0)!important;background-color:var(--secondary-0)!important}.sbchapter__item.selected{background:var(--secondary-300);border:solid 1px var(--primary-600)}.sbchapter__item.active.selected{border:solid 1px var(--primary-600)!important}.sbchapter__item .btn-addtoLibrary{position:absolute;right:1px;display:flex;justify-content:center;align-items:center;padding:8px}.sbchapter__item h4{font-size:12px;line-height:calculateRem(20px);color:var(--primary-400);margin:0;padding:0}.sbchapter__item .sbchapter__img{width:calculateRem(40px);height:calculateRem(40px);flex:0 0 calculateRem(40px);overflow:hidden}.sbchapter__item .sbchapter__img img{width:100%}.sbchapter__item:last-child{margin-bottom:0}.sbchapter__item:hover{background:var(--secondary-0)}.sbchapter__item:hover{visibility:visible}.sbchapter__item--active{background:var(--primary-100)}.sbchapter__item .sb-checkbox.ui.checkbox{min-width:30px!important}.sb-btn-dark-green{background:var(--green);border:solid 1px green!important;color:var(--white)}.b-none{border:none!important}.fs-0785{font-size:.785rem}.bg-white{background:#fff}.result-no-found{background:#fff!important;position:relative;z-index:99}.result-no-found .ui.container{width:100%!important;height:100vh}lib-chat-window,.chat_bot{display:none}\n"], dependencies: [{ kind: "directive", type: i8.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i9.LibraryFilterComponent, selector: "lib-library-filter", inputs: ["sessionContext", "filterValues", "filterOpenStatus", "searchFormConfig", "frameworkId"], outputs: ["filterChangeEvent"] }, { kind: "component", type: i10.LibraryListComponent, selector: "lib-library-list", inputs: ["contentList", "showAddedContent", "selectedContent"], outputs: ["contentChangeEvent", "moveEvent"] }, { kind: "component", type: i11.LibraryPlayerComponent, selector: "lib-library-player", inputs: ["contentListDetails"], outputs: ["moveEvent"] }, { kind: "component", type: i12.ResourceReorderComponent, selector: "lib-resource-reorder", inputs: ["selectedContentDetails", "collectionId", "collectionUnits", "programContext", "prevUnitSelect", "collectionhierarcyData"], outputs: ["moveEvent"] }, { kind: "component", type: i13.SkeletonLoaderComponent, selector: "lib-skeleton-loader", inputs: ["height", "width", "mTop"] }, { kind: "directive", type: i14.TelemetryInteractDirective, selector: "[libTelemetryInteract]", inputs: ["telemetryInteractEdata"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
233
|
+
}
|
|
234
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: LibraryComponent, decorators: [{
|
|
235
|
+
type: Component,
|
|
236
|
+
args: [{ selector: 'lib-library', encapsulation: ViewEncapsulation.None, template: "<div class=\"add-to-library mb-0\">\n <!-- Blue Header -->\n <div class=\"sb-bg-color-primary add-to-library__header\">\n <div class=\"ui container sb-container relative position\">\n <div class=\"d-flex flex-ai-center\">\n <button class=\"sb-btn sb-btn-primary sb-btn-xs back-btn px-0\" libTelemetryInteract\n [telemetryInteractEdata]=\"telemetryService.getTelemetryInteractEdata('back','click','launch', telemetryService?.telemetryPageId)\"(click)=\"back();\"><i class=\"arrow left icon fs-1\"></i></button>\n <div class=\"ml-8 sb-color-white\">\n <div class=\"d-flex flex-ai-center fsmall\">\n <div class=\"font-weight-bold fs-1-16\">{{configService.labelConfig?.lbl?.addFromLibrary}}</div>\n <!-- <div class=\"sb-border-vertical mx-15\"></div>\n <div class=\"flex flex-wrap\">\n <h5>Chapter 1</h5>\n <span>Science</span><span class=\"add-to-library-dot\"></span><span>Class 10</span><span\n class=\"add-to-library-dot\"></span><span>DP-1205</span>\n </div> -->\n </div>\n </div>\n </div>\n </div>\n </div>\n<!-- Filter -->\n <lib-library-filter *ngIf=\"!showLoader\" [filterValues]=\"defaultFilters\" [searchFormConfig]=\"searchFormConfig\" [filterOpenStatus]=\"isFilterOpen\" [frameworkId]=\"frameworkId\" (filterChangeEvent)=\"onFilterChange($event);\"></lib-library-filter>\n <div class=\"ui container sb-container min-h-500\" *ngIf=\"!showLoader && contentList?.length\">\n <!-- Player Section -->\n <div class=\"sb-g add-to-library__toc-player\">\n <!-- Left Sidebar for cards -->\n <section class=\"sb-g-col-xs-12 sb-g-col-md-4 sb-g-col-lg-4\">\n <lib-library-list (contentChangeEvent)= \"onContentChangeEvent($event)\" [selectedContent] = \"selectedContent\"[contentList]=\"contentList\" [showAddedContent]=\"showAddedContent\" (moveEvent)=\"showResourceTemplate($event)\"></lib-library-list>\n </section>\n <!-- Right Player Sections -->\n <section class=\"sb-g-col-xs-12 sb-g-col-md-8 sb-g-col-lg-8 relative position ml-24\">\n <lib-library-player [contentListDetails]=\"selectedContent\" (moveEvent)=\"showResourceTemplate($event)\"></lib-library-player>\n </section>\n </div>\n </div>\n</div>\n<div class=\"result-no-found\">\n <div class=\"ui container sb-container\" *ngIf=\"showLoader\">\n <div class=\"sb-g add-to-library__toc-player ml-30\">\n <!-- Left Sidebar for cards -->\n <section class=\"sb-g-col-xs-12 sb-g-col-md-4 sb-g-col-lg-4\">\n <div class=\"sbtoc-container pr-8 mt-20\">\n <div class=\"sbaccordion__panel-content p-16 mb-8 sb-dock-skeleton-bx\">\n <div class=\"sbchapter__item\" *ngFor=\"let number of [].constructor(4)\">\n <lib-skeleton-loader [width]=\"'90%'\" [height]=\"'12px'\" class=\"sb-dock-flex-auto\"></lib-skeleton-loader>\n <div>\n <lib-skeleton-loader [width]=\"'30%'\" [height]=\"'12px'\" class=\"sb-dock-flex-auto\"></lib-skeleton-loader>\n </div>\n </div>\n </div>\n </div>\n </section>\n </div>\n </div>\n</div>\n<div *ngIf=\"showSelectResourceModal\">\n <lib-resource-reorder [prevUnitSelect]= \"selectedUnit\" [collectionhierarcyData]=\"collectionhierarcyData\" [collectionUnits]=\"collectionHierarchy\" [selectedContentDetails]=\"selectedContent\" [collectionId]=\"collectionId\" (moveEvent)=\"showResourceTemplate($event)\"></lib-resource-reorder>\n</div>\n\n<!--empty result -->\n<div class=\"result-no-found\">\n <div class=\"ui container sb-container\" *ngIf=\"!showLoader && !contentList?.length\">\n <div class=\"add-to-library__no-result\">\n <h5 class=\"font-weight-bold\">{{configService.labelConfig?.lbl?.noMatchingContent}}</h5>\n <img alt=\"No Content available\" class=\"mt-16\" src=\"assets/images/emptyResult.svg\">\n <h6 class=\"sb-color-gray-300 font-weight-normal mt-8\">{{configService.labelConfig?.lbl?.changeFilterMessage}}</h6>\n <button class=\"sb-btn sb-btn-secondary sb-btn-normal mt-16\" libTelemetryInteract\n [telemetryInteractEdata]=\"telemetryService.getTelemetryInteractEdata('change_filter','click','launch', telemetryService?.telemetryPageId)\" (click)=\"openFilter();\">{{configService.labelConfig?.lbl?.changeFilter}}</button>\n </div>\n </div>\n</div>", styles: [".add-to-library__header{height:55px;line-height:50px}.add-to-library__no-result{display:flex;flex-direction:column;align-items:center;padding:5.5rem 0 0;width:20rem;text-align:center;margin:0 auto}.sb-dock-skeleton-bx{border-top:.0625rem solid #e0e0e0;background:var(--gray-0);min-height:2rem;overflow:hidden;overflow-y:auto;box-shadow:#0000001a}.sb-dock-flex-auto{flex:1 1 auto}.sb-dock-width-auto{width:auto}.sbchapter{border-bottom:calculateRem(1px) solid #ddd;padding:calculateRem(16px) calculateRem(16px) calculateRem(8px) calculateRem(16px)}.sbchapter h4{font-size:10px;line-height:normal;color:var(--gray-800);margin-bottom:calculateRem(8px)}.sbchapter .textbookBtnLink{visibility:hidden}.sbchapter__item{background:var(--white);border:calculateRem(1px) solid #ddd;box-shadow:0 calculateRem(3px) calculateRem(4px) 0 #024f9d1a;display:flex;align-items:flex-start;justify-content:space-between;margin-bottom:.5rem;padding:.5rem;cursor:pointer;min-height:3.2rem;position:relative}.sbchapter__item.active{background:var(--secondary-300);border:.0625rem solid var(--gray-100);border-bottom:0}.sbchapter__item.active.active:last-child{border-bottom:.0625rem solid var(--gray-100)}.sbchapter__item.active .textbookBtnLink{visibility:visible;right:12px}.sbchapter__item.active .textbookBtnLink .sb-btn-link{border-color:var(--secondary-0)!important;background-color:var(--secondary-0)!important}.sbchapter__item.selected{background:var(--secondary-300);border:solid 1px var(--primary-600)}.sbchapter__item.active.selected{border:solid 1px var(--primary-600)!important}.sbchapter__item .btn-addtoLibrary{position:absolute;right:1px;display:flex;justify-content:center;align-items:center;padding:8px}.sbchapter__item h4{font-size:12px;line-height:calculateRem(20px);color:var(--primary-400);margin:0;padding:0}.sbchapter__item .sbchapter__img{width:calculateRem(40px);height:calculateRem(40px);flex:0 0 calculateRem(40px);overflow:hidden}.sbchapter__item .sbchapter__img img{width:100%}.sbchapter__item:last-child{margin-bottom:0}.sbchapter__item:hover{background:var(--secondary-0)}.sbchapter__item:hover{visibility:visible}.sbchapter__item--active{background:var(--primary-100)}.sbchapter__item .sb-checkbox.ui.checkbox{min-width:30px!important}.sb-btn-dark-green{background:var(--green);border:solid 1px green!important;color:var(--white)}.b-none{border:none!important}.fs-0785{font-size:.785rem}.bg-white{background:#fff}.result-no-found{background:#fff!important;position:relative;z-index:99}.result-no-found .ui.container{width:100%!important;height:100vh}lib-chat-window,.chat_bot{display:none}\n"] }]
|
|
237
|
+
}], ctorParameters: function () { return [{ type: i1.EditorTelemetryService }, { type: i2.EditorService }, { type: i3.Router }, { type: i4.TreeService }, { type: i5.ToasterService }, { type: i6.ConfigService }, { type: i7.HelperService }]; }, propDecorators: { libraryInput: [{
|
|
238
|
+
type: Input
|
|
239
|
+
}], libraryEmitter: [{
|
|
240
|
+
type: Output
|
|
241
|
+
}] } });
|
|
242
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlicmFyeS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb2xsZWN0aW9uLWVkaXRvci1saWJyYXJ5L3NyYy9saWIvY29tcG9uZW50cy9saWJyYXJ5L2xpYnJhcnkuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29sbGVjdGlvbi1lZGl0b3ItbGlicmFyeS9zcmMvbGliL2NvbXBvbmVudHMvbGlicmFyeS9saWJyYXJ5LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQWlCLGlCQUFpQixFQUFhLE1BQU0sZUFBZSxDQUFDO0FBQzVILE9BQU8sS0FBSyxDQUFDLE1BQU0sV0FBVyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7O0FBZS9CLE1BQU0sT0FBTyxnQkFBZ0I7SUFvQjNCLFlBQW1CLGdCQUF3QyxFQUN2QyxhQUE0QixFQUM1QixNQUFjLEVBQ2QsV0FBd0IsRUFDeEIsY0FBOEIsRUFDL0IsYUFBNEIsRUFDM0IsYUFBNEI7UUFON0IscUJBQWdCLEdBQWhCLGdCQUFnQixDQUF3QjtRQUN2QyxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1QixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQy9CLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzNCLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBeEJ0QyxtQkFBYyxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFFNUMsV0FBTSxHQUFHLGtCQUFrQixDQUFDO1FBSW5DLDRCQUF1QixHQUFHLEtBQUssQ0FBQztRQUVoQyx3QkFBbUIsR0FBRyxFQUFFLENBQUM7UUFFbEIscUJBQWdCLEdBQUcsS0FBSyxDQUFDO1FBQ3pCLGVB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Q0FBQztRQUNILElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDbkIsSUFBSSxvQkFBb0IsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7WUFDekcsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsS0FBSyxJQUFJLEVBQUU7Z0JBQzVFLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7Z0JBQzdCLG9CQUFvQixHQUFHLENBQUMsQ0FBQzthQUMxQjtZQUNELElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1NBQy9EO0lBQ0gsQ0FBQztJQUNELFdBQVc7UUFDVCxJQUFJLENBQUMsYUFBYSxDQUFDLCtCQUErQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsbURBQW1EO0lBQy9HLENBQUM7K0dBeE9VLGdCQUFnQjttR0FBaEIsZ0JBQWdCLDRJQ2hCN0IscTBJQXVFTTs7NEZEdkRPLGdCQUFnQjtrQkFONUIsU0FBUzsrQkFDRSxhQUFhLGlCQUdSLGlCQUFpQixDQUFDLElBQUk7NlFBRzVCLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0ksY0FBYztzQkFBdkIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIEFmdGVyVmlld0luaXQsIFZpZXdFbmNhcHN1bGF0aW9uLCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IFRyZWVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdHJlZS90cmVlLnNlcnZpY2UnO1xuaW1wb3J0IHsgRWRpdG9yU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2VkaXRvci9lZGl0b3Iuc2VydmljZSc7XG5pbXBvcnQgeyBUb2FzdGVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RvYXN0ZXIvdG9hc3Rlci5zZXJ2aWNlJztcbmltcG9ydCB7IEVkaXRvclRlbGVtZXRyeVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90ZWxlbWV0cnkvdGVsZW1ldHJ5LnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29uZmlnU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NvbmZpZy9jb25maWcuc2VydmljZSc7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgSGVscGVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2hlbHBlci9oZWxwZXIuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpYi1saWJyYXJ5JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2xpYnJhcnkuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9saWJyYXJ5LmNvbXBvbmVudC5zY3NzJ10sXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG59KVxuZXhwb3J0IGNsYXNzIExpYnJhcnlDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG4gIEBJbnB1dCgpIGxpYnJhcnlJbnB1dDogYW55O1xuICBAT3V0cHV0KCkgbGlicmFyeUVtaXR0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgcHVibGljIHNlYXJjaEZvcm1Db25maWc6IGFueTtcbiAgcHVibGljIHBhZ2VJZCA9ICdhZGRfZnJvbV9saWJyYXJ5JztcbiAgcHVibGljIGNvbnRlbnRMaXN0OiBhbnk7XG4gIHB1YmxpYyBzZWxlY3RlZENvbnRlbnQ6IGFueTtcbiAgcHVibGljIGNoaWxkTm9kZXM6IGFueTtcbiAgc2hvd1NlbGVjdFJlc291cmNlTW9kYWwgPSBmYWxzZTtcbiAgY29sbGVjdGlvblVuaXRzOiBhbnk7XG4gIGNvbGxlY3Rpb25IaWVyYXJjaHkgPSBbXTtcbiAgY29sbGVjdGlvbklkOiBzdHJpbmc7XG4gIHB1YmxpYyBzaG93QWRkZWRDb250ZW50ID0gZmFsc2U7XG4gIHB1YmxpYyBzaG93TG9hZGVyID0gdHJ1ZTtcbiAgcHVibGljIGlzRmlsdGVyT3BlbiA9IGZhbHNlO1xuICBjb2xsZWN0aW9uaGllcmFyY3lEYXRhOiBhbnk7XG4gIHB1YmxpYyBkZWZhdWx0RmlsdGVyczogYW55O1xuICBwYWdlU3RhcnRUaW1lOiBhbnk7XG4gIHNlbGVjdGVkVW5pdDogc3RyaW5nO1xuICBwdWJsaWMgZnJhbWV3b3JrSWQ6IGFueTtcbiAgY29uc3RydWN0b3IocHVibGljIHRlbGVtZXRyeVNlcnZpY2U6IEVkaXRvclRlbGVtZXRyeVNlcnZpY2UsXG4gICAgICAgICAgICAgIHByaXZhdGUgZWRpdG9yU2VydmljZTogRWRpdG9yU2VydmljZSxcbiAgICAgICAgICAgICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICAgICAgICAgICAgcHJpdmF0ZSB0cmVlU2VydmljZTogVHJlZVNlcnZpY2UsXG4gICAgICAgICAgICAgIHByaXZhdGUgdG9hc3RlclNlcnZpY2U6IFRvYXN0ZXJTZXJ2aWNlLFxuICAgICAgICAgICAgICBwdWJsaWMgY29uZmlnU2VydmljZTogQ29uZmlnU2VydmljZSxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBoZWxwZXJTZXJ2aWNlOiBIZWxwZXJTZXJ2aWNlKSB7XG4gICAgICAgICAgICAgIHRoaXMucGFnZVN0YXJ0VGltZSA9IERhdGUubm93KCk7XG4gICAgICAgICAgICAgIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICBjb25zdCBhY3RpdmVOb2RlID0gdGhpcy50cmVlU2VydmljZS5nZXRBY3RpdmVOb2RlKCk7XG4gICAgdGhpcy5zZWxlY3RlZFVuaXQgPSBfLmdldChhY3RpdmVOb2RlLCAnZGF0YS5pZCcpO1xuICAgIHRoaXMuY29sbGVjdGlvbklkID0gXy5nZXQodGhpcy5saWJyYXJ5SW5wdXQsICdjb2xsZWN0aW9uSWQnKTtcbiAgICB0aGlzLnNlYXJjaEZvcm1Db25maWcgPSBfLmdldCh0aGlzLmxpYnJhcnlJbnB1dCwgJ3NlYXJjaEZvcm1Db25maWcnKTtcbiAgICB0aGlzLmVkaXRvclNlcnZpY2UuZmV0Y2hDb2xsZWN0aW9uSGllcmFyY2h5KHRoaXMuY29sbGVjdGlvbklkKS5zdWJzY3JpYmUoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgIHRoaXMuY29sbGVjdGlvbmhpZXJhcmN5RGF0YSA9IHJlc3BvbnNlLnJlc3VsdC5jb250ZW50O1xuICAgICAgdGhpcy5jb2xsZWN0aW9uSGllcmFyY2h5ID0gdGhpcy5nZXRVbml0V2l0aENoaWxkcmVuKHRoaXMuY29sbGVjdGlvbmhpZXJhcmN5RGF0YSwgdGhpcy5jb2xsZWN0aW9uSWQpO1xuICAgICAgaWYgKF8uaGFzKHRoaXMuY29sbGVjdGlvbmhpZXJhcmN5RGF0YSwgJ3RhcmdldEZXSWRzJykpIHtcbiAgICAgICAgdGhpcy5mcmFtZXdvcmtJZCA9IF8uZmlyc3QoXy5jYXN0QXJyYXkodGhpcy5jb2xsZWN0aW9uaGllcmFyY3lEYXRhLnRhcmdldEZXSWRzKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmZyYW1ld29ya0lkID0gXy5maXJzdChfLmNhc3RBcnJheSh0aGlzLmNvbGxlY3Rpb25oaWVyYXJjeURhdGEuZnJhbWV3b3JrKSk7XG4gICAgICB9XG4gICAgICB0aGlzLnNldERlZmF1bHRGaWx0ZXJzKCk7XG4gICAgICB0aGlzLmZldGNoQ29udGVudExpc3QoKTtcbiAgICAgIHRoaXMudGVsZW1ldHJ5U2VydmljZS50ZWxlbWV0cnlQYWdlSWQgPSB0aGlzLnBhZ2VJZDtcbiAgICAgIHRoaXMuY2hpbGROb2RlcyA9IF8uZ2V0KHRoaXMuY29sbGVjdGlvbmhpZXJhcmN5RGF0YSwgJ2NoaWxkTm9kZXMnKTtcbiAgICB9LCBlcnIgPT4ge1xuICAgICAgdGhpcy50b2FzdGVyU2VydmljZS5lcnJvcihfLmdldCh0aGlzLmNvbmZpZ1NlcnZpY2UsICdsYWJlbENvbmZpZy5tZXNzYWdlcy5lcnJvci4wMDEnKSk7XG4gICAgfSk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgdGhpcy50ZWxlbWV0cnlTZXJ2aWNlLmltcHJlc3Npb24oe1xuICAgICAgdHlwZTogJ2VkaXQnLCBwYWdlaWQ6IHRoaXMudGVsZW1ldHJ5U2VydmljZS50ZWxlbWV0cnlQYWdlSWQsIHVyaTogdGhpcy5yb3V0ZXIudXJsLFxuICAgICAgZHVyYXRpb246IChEYXRlLm5vdygpIC0gdGhpcy5wYWdlU3RhcnRUaW1lKSAvIDEwMDBcbiAgICB9KTtcbiAgfVxuXG4gIGJhY2soKSB7XG4gICAgdGhpcy5saWJyYXJ5RW1pdHRlci5lbWl0KHt9KTtcbiAgICB0aGlzLmVkaXRvclNlcnZpY2UuY29udGVudHNDb3VudEFkZGVkSW5MaWJyYXJ5UGFnZSh0cnVlKTsgLy8gY29udGVudHMgY291bnQgdXBkYXRlZCBmcm9tIGxpYnJhcnkgcGFnZSB0byB6ZXJvXG4gIH1cblxuICBvbkZpbHRlckNoYW5nZShldmVudDogYW55KSB7XG4gICAgc3dpdGNoIChldmVudC5hY3Rpb24pIHtcbiAgICAgIGNhc2UgJ2ZpbHRlckRhdGFDaGFuZ2UnOlxuICAgICAgICB0aGlzLmZldGNoQ29udGVudExpc3QoZXZlbnQuZmlsdGVycywgZXZlbnQucXVlcnkpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2ZpbHRlclN0YXR1c0NoYW5nZSc6XG4gICAgICAgIHRoaXMuaXNGaWx0ZXJPcGVuID0gZXZlbnQuZmlsdGVyU3RhdHVzO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBzZXREZWZhdWx0RmlsdGVycygpIHtcbiAgICBjb25zdCBzZWxlY3RlZE5vZGUgPSB0aGlzLnRyZWVTZXJ2aWNlLmdldEFjdGl2ZU5vZGUoKTtcbiAgICBsZXQgY29udGVudFR5cGVzID0gXy5mbGF0dGVuKFxuICAgICAgXy5tYXAoXy5nZXQodGhpcy5lZGl0b3JTZXJ2aWNlLmVkaXRvckNvbmZpZy5jb25maWcsIGBoaWVyYXJjaHkubGV2ZWwke3NlbGVjdGVkTm9kZS5nZXRMZXZlbCgpIC0gMX0uY2hpbGRyZW5gKSwgKHZhbCkgPT4ge1xuICAgICAgcmV0dXJuIHZhbDtcbiAgICB9KSk7XG5cbiAgICBpZiAoXy5pc0VtcHR5KGNvbnRlbnRUeXBlcykpIHtcbiAgICAgIGNvbnRlbnRUeXBlcyA9IF8ubWFwKHRoaXMuaGVscGVyU2VydmljZS5jb250ZW50UHJpbWFyeUNhdGVnb3JpZXMsICduYW1lJyk7XG4gICAgfVxuXG4gICAgdGhpcy5kZWZhdWx0RmlsdGVycyA9IF8ucGlja0J5KHtcbiAgICAgIHByaW1hcnlDYXRlZ29yeTogY29udGVudFR5cGVzXG4gICAgICAvLyBib2FyZDogW18uZ2V0KHRoaXMuY29sbGVjdGlvbmhpZXJhcmN5RGF0YSwgJ2JvYXJkJyldIHx8IF8uZ2V0KHRoaXMuY29sbGVjdGlvbmhpZXJhcmN5RGF0YSwgJ2JvYXJkSWRzJyksXG4gICAgICAvLyBncmFkZUxldmVsOiBfLmdldCh0aGlzLmNvbGxlY3Rpb25oaWVyYXJjeURhdGEsICdncmFkZUxldmVsJykgfHwgXy5nZXQodGhpcy5jb2xsZWN0aW9uaGllcmFyY3lEYXRhLCAnZ3JhZGVMZXZlbElkcycpLFxuICAgICAgLy8gbWVkaXVtOiBfLmdldCh0aGlzLmNvbGxlY3Rpb25oaWVyYXJjeURhdGEsICdtZWRpdW0nKSB8fCBfLmdldCh0aGlzLmNvbGxlY3Rpb25oaWVyYXJjeURhdGEsICdtZWRpdW1JZHMnKSxcbiAgICAgIC8vIHN1YmplY3Q6IF8uZ2V0KHRoaXMuY29sbGVjdGlvbmhpZXJhcmN5RGF0YSwgJ3N1YmplY3QnKSB8fCBfLmdldCh0aGlzLmNvbGxlY3Rpb25oaWVyYXJjeURhdGEsICdzdWJqZWN0SWRzJyksXG4gICAgfSk7XG4gIH1cblxuICBmZXRjaENvbnRlbnRMaXN0KGZpbHRlcnM/LCBxdWVyeT8pIHtcbiAgICBmaWx0ZXJzID0gZmlsdGVycyB8fCB0aGlzLmRlZmF1bHRGaWx0ZXJzO1xuICAgIGNvbnN0IGNoYW5uZWwgPSBfLmdldCh0aGlzLmVkaXRvclNlcnZpY2UuZWRpdG9yQ29uZmlnLCAnY29udGV4dC5jaGFubmVsJylcbiAgICBjb25zdCBvcHRpb24gPSB7XG4gICAgICB1cmw6ICdjb21wb3NpdGUvdjMvc2VhcmNoJyxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgcmVxdWVzdDoge1xuICAgICAgICAgIHF1ZXJ5OiBxdWVyeSB8fCAnJyxcbiAgICAgICAgICBmaWx0ZXJzOiBfLnBpY2tCeSh7IC4uLmZpbHRlcnMsIC4uLnsgc3RhdHVzOiBbJ0xpdmUnXSwgY2hhbm5lbCB9fSksXG4gICAgICAgICAgc29ydF9ieToge1xuICAgICAgICAgICAgbGFzdFVwZGF0ZWRPbjogJ2Rlc2MnXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgICB0aGlzLmVkaXRvclNlcnZpY2UuZmV0Y2hDb250ZW50TGlzdERldGFpbHMob3B0aW9uKS5zdWJzY3JpYmUoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgIHRoaXMuc2hvd0xvYWRlciA9IGZhbHNlO1xuICAgICAgaWYgKCEoXy5nZXQocmVzcG9uc2UsICdyZXN1bHQuY291bnQnKSkpIHtcbiAgICAgICAgdGhpcy5jb250ZW50TGlzdCA9IFtdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jb250ZW50TGlzdCA9IF8uY29tcGFjdChfLmNvbmNhdChfLmdldChyZXNwb25zZS5yZXN1bHQsICdjb250ZW50JyksIF8uZ2V0KHJlc3BvbnNlLnJlc3VsdCwgJ1F1ZXN0aW9uU2V0JykpKTtcbiAgICAgICAgdGhpcy5maWx0ZXJDb250ZW50TGlzdCgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgZ2V0VW5pdFdpdGhDaGlsZHJlbihkYXRhLCBjb2xsZWN0aW9uSWQsIGxldmVsPykge1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIGNvbnN0IGNoaWxkRGF0YSA9IGRhdGEuY2hpbGRyZW47XG4gICAgaWYgKF8uaXNFbXB0eShjaGlsZERhdGEpKSB7IHJldHVybiBbXTsgfVxuICAgIGRhdGEubGV2ZWwgPSBsZXZlbCA/IChsZXZlbCArIDEpIDogMTtcbiAgICBjb25zdCB0cmVlID0gY2hpbGREYXRhLm1hcChjaGlsZCA9PiB7XG4gICAgICBjb25zdCB0cmVlSXRlbTogYW55ID0gdGhpcy5nZW5lcmF0ZU5vZGVNZXRhKGNoaWxkKTtcbiAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTptYXgtbGluZS1sZW5ndGhcbiAgICAgIHRyZWVJdGVtLnNob3dCdXR0b24gPSBfLmlzRW1wdHkoXy5nZXQodGhpcy5lZGl0b3JTZXJ2aWNlLmVkaXRvckNvbmZpZywgYGNvbmZpZy5oaWVyYXJjaHkubGV2ZWwke2RhdGEubGV2ZWx9LmNoaWxkcmVuYCkpID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgY29uc3QgdHJlZVVuaXQgPSBzZWxmLmdldFVuaXRXaXRoQ2hpbGRyZW4oY2hpbGQsIGNvbGxlY3Rpb25JZCwgZGF0YS5sZXZlbCk7XG4gICAgICBjb25zdCB0cmVlQ2hpbGRyZW4gPSB0cmVlVW5pdCAmJiB0cmVlVW5pdC5maWx0ZXIoaXRlbSA9PiB7XG4gICAgICAgIHJldHVybiBpdGVtLnZpc2liaWxpdHkgPT09ICdQYXJlbnQnICYmIGl0ZW0ubWltZVR5cGUgPT09ICdhcHBsaWNhdGlvbi92bmQuZWtzdGVwLmNvbnRlbnQtY29sbGVjdGlvbic7XG4gICAgICB9KTsgLy8gVE9ETzogcmV0aGluayB0aGlzIDogbmVlZCB0byBjaGVjayBmb3IgcXVlc3Rpb25TZXRcbiAgICAgIHRyZWVJdGVtLmNoaWxkcmVuID0gKHRyZWVDaGlsZHJlbiAmJiB0cmVlQ2hpbGRyZW4ubGVuZ3RoID4gMCkgPyB0cmVlQ2hpbGRyZW4gOiBudWxsO1xuICAgICAgcmV0dXJuIHRyZWVJdGVtO1xuICAgIH0pO1xuICAgIHJldHVybiB0cmVlO1xuICB9XG5cbiAgZ2VuZXJhdGVOb2RlTWV0YShub2RlKSB7XG4gICAgY29uc3Qgbm9kZU1ldGEgPSB7XG4gICAgICBpZGVudGlmaWVyOiBub2RlLmlkZW50aWZpZXIsXG4gICAgICBuYW1lOiBub2RlLm5hbWUsXG4gICAgICBjb250ZW50VHlwZTogbm9kZS5jb250ZW50VHlwZSxcbiAgICAgIHRvcGljOiBub2RlLnRvcGljLFxuICAgICAgc3RhdHVzOiBub2RlLnN0YXR1cyxcbiAgICAgIGNyZWF0b3I6IG5vZGUuY3JlYXRvcixcbiAgICAgIGNyZWF0ZWRCeTogbm9kZS5jcmVhdGVkQnkgfHwgbnVsbCxcbiAgICAgIHBhcmVudElkOiBub2RlLnBhcmVudCB8fCBudWxsLFxuICAgICAgb3JnYW5pc2F0aW9uSWQ6IF8uaGFzKG5vZGUsICdvcmdhbmlzYXRpb25JZCcpID8gbm9kZS5vcmdhbmlzYXRpb25JZCA6IG51bGwsXG4gICAgICBwcmV2U3RhdHVzOiBub2RlLnByZXZTdGF0dXMgfHwgbnVsbCxcbiAgICAgIHZpc2liaWxpdHk6IG5vZGUudmlzaWJpbGl0eSxcbiAgICAgIG1pbWVUeXBlOiBub2RlLm1pbWVUeXBlXG4gICAgfTtcbiAgICByZXR1cm4gbm9kZU1ldGE7XG4gIH1cblxuXG4gIG9uQ29udGVudENoYW5nZUV2ZW50KGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLnNlbGVjdGVkQ29udGVudCA9IGV2ZW50LmNvbnRlbnQ7XG4gIH1cblxuICBzaG93UmVzb3VyY2VUZW1wbGF0ZShldmVudCkge1xuICAgIHN3aXRjaCAoZXZlbnQuYWN0aW9uKSB7XG4gICAgICBjYXNlICdzaG93RmlsdGVyJzpcbiAgICAgICAgdGhpcy5vcGVuRmlsdGVyKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnb3BlbkhpZXJhcmNoeVBvcHVwJzpcbiAgICAgICAgdGhpcy5zaG93U2VsZWN0UmVzb3VyY2VNb2RhbCA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnY2xvc2VIaWVyYXJjaHlQb3B1cCc6XG4gICAgICAgIHRoaXMuc2hvd1NlbGVjdFJlc291cmNlTW9kYWwgPSBmYWxzZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdzaG93QWRkZWRDb250ZW50JzpcbiAgICAgICAgdGhpcy5zaG93QWRkZWRDb250ZW50ID0gZXZlbnQuc3RhdHVzO1xuICAgICAgICB0aGlzLmZpbHRlckNvbnRlbnRMaXN0KCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnY29udGVudEFkZGVkJzpcbiAgICAgICAgdGhpcy5jaGlsZE5vZGVzLnB1c2goZXZlbnQuZGF0YS5pZGVudGlmaWVyKTtcbiAgICAgICAgdGhpcy5nZXRIaWVyYXJjaHlEYXRhKCk7XG4gICAgICAgIHRoaXMuZWRpdG9yU2VydmljZS5jb250ZW50c0NvdW50QWRkZWRJbkxpYnJhcnlQYWdlKCk7IC8vIGNvbnRlbnRzIGNvdW50IGFkZGVkIGZyb20gbGlicmFyeSBwYWdlXG4gICAgICAgIHRoaXMuZmlsdGVyQ29udGVudExpc3QodHJ1ZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdzb3J0Q29udGVudExpc3QnOlxuICAgICAgICAgIHRoaXMuc29ydENvbnRlbnRMaXN0KGV2ZW50LnN0YXR1cyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgZ2V0SGllcmFyY2h5RGF0YSgpIHtcbiAgICB0aGlzLmVkaXRvclNlcnZpY2UuZmV0Y2hDb2xsZWN0aW9uSGllcmFyY2h5KHRoaXMuY29sbGVjdGlvbklkKS5zdWJzY3JpYmUoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgIHRoaXMuY29sbGVjdGlvbmhpZXJhcmN5RGF0YSA9IHJlc3BvbnNlLnJlc3VsdC5jb250ZW50O1xuICAgIH0sIGVyciA9PiB7XG4gICAgICB0aGlzLnRvYXN0ZXJTZXJ2aWNlLmVycm9yKF8uZ2V0KHRoaXMuY29uZmlnU2VydmljZSwgJ2xhYmVsQ29uZmlnLm1lc3NhZ2VzLmVycm9yLjAwMScpKTtcbiAgICB9KTtcbiAgfVxuc29ydENvbnRlbnRMaXN0KHN0YXR1cykge1xuICB0aGlzLmNvbnRlbnRMaXN0ID0gdGhpcy5jb250ZW50TGlzdC5zb3J0KChhLCBiKSA9PiB7XG4gICAgcmV0dXJuIHRoaXMuZWRpdG9yU2VydmljZS5zb3J0KHN0YXR1cyA/IGIgOiBhLCBzdGF0dXMgPyBhIDogIGIsIHN0YXR1cyA/ICduYW1lJyA6ICdsYXN0VXBkYXRlZE9uJyk7XG4gIH0pO1xuICBjb25zdCBzZWxlY3RlZENvbnRlbnRJbmRleCA9IHRoaXMuc2hvd0FkZGVkQ29udGVudCA/IDAgOiBfLmZpbmRJbmRleCh0aGlzLmNvbnRlbnRMaXN0LCB7IGlzQWRkZWQ6IGZhbHNlIH0pO1xuICB0aGlzLnNlbGVjdGVkQ29udGVudCA9IHRoaXMuY29udGVudExpc3Rbc2VsZWN0ZWRDb250ZW50SW5kZXhdO1xufVxuXG4gIG9wZW5GaWx0ZXIoKTogdm9pZCB7XG4gICAgd2luZG93LnNjcm9sbFRvKHtcbiAgICAgIHRvcDogMCxcbiAgICAgIGxlZnQ6IDAsXG4gICAgICBiZWhhdmlvcjogJ3Ntb290aCdcbiAgICB9KTtcbiAgICB0aGlzLmlzRmlsdGVyT3BlbiA9IHRydWU7XG4gIH1cbiAgZmlsdGVyQ29udGVudExpc3QoaXNDb250ZW50QWRkZWQ/KSB7XG4gICAgaWYgKF8uaXNFbXB0eSh0aGlzLmNvbnRlbnRMaXN0KSkgeyByZXR1cm47IH1cbiAgICBfLmZvckVhY2godGhpcy5jb250ZW50TGlzdCwgKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICB2YWx1ZS5pc0FkZGVkID0gXy5pbmNsdWRlcyh0aGlzLmNoaWxkTm9kZXMsIHZhbHVlLmlkZW50aWZpZXIpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmICghaXNDb250ZW50QWRkZWQpIHtcbiAgICAgIGxldCBzZWxlY3RlZENvbnRlbnRJbmRleCA9IHRoaXMuc2hvd0FkZGVkQ29udGVudCA/IDAgOiBfLmZpbmRJbmRleCh0aGlzLmNvbnRlbnRMaXN0LCB7IGlzQWRkZWQ6IGZhbHNlIH0pO1xuICAgICAgaWYgKHRoaXMuY29udGVudExpc3QubGVuZ3RoID09PSAxICYmIHRoaXMuY29udGVudExpc3RbMF1bJ2lzQWRkZWQnXSA9PT0gdHJ1ZSkge1xuICAgICAgICB0aGlzLnNob3dBZGRlZENvbnRlbnQgPSB0cnVlO1xuICAgICAgICBzZWxlY3RlZENvbnRlbnRJbmRleCA9IDA7XG4gICAgICB9XG4gICAgICB0aGlzLnNlbGVjdGVkQ29udGVudCA9IHRoaXMuY29udGVudExpc3Rbc2VsZWN0ZWRDb250ZW50SW5kZXhdO1xuICAgIH1cbiAgfVxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLmVkaXRvclNlcnZpY2UuY29udGVudHNDb3VudEFkZGVkSW5MaWJyYXJ5UGFnZSh0cnVlKTsgLy8gY29udGVudHMgY291bnQgdXBkYXRlZCBmcm9tIGxpYnJhcnkgcGFnZSB0byB6ZXJvXG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJhZGQtdG8tbGlicmFyeSBtYi0wXCI+XG4gIDwhLS0gQmx1ZSBIZWFkZXIgLS0+XG4gIDxkaXYgY2xhc3M9XCJzYi1iZy1jb2xvci1wcmltYXJ5IGFkZC10by1saWJyYXJ5X19oZWFkZXJcIj5cbiAgICA8ZGl2IGNsYXNzPVwidWkgY29udGFpbmVyIHNiLWNvbnRhaW5lciAgcmVsYXRpdmUgcG9zaXRpb25cIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1haS1jZW50ZXJcIj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInNiLWJ0biBzYi1idG4tcHJpbWFyeSBzYi1idG4teHMgYmFjay1idG4gcHgtMFwiIGxpYlRlbGVtZXRyeUludGVyYWN0XG4gICAgICAgIFt0ZWxlbWV0cnlJbnRlcmFjdEVkYXRhXT1cInRlbGVtZXRyeVNlcnZpY2UuZ2V0VGVsZW1ldHJ5SW50ZXJhY3RFZGF0YSgnYmFjaycsJ2NsaWNrJywnbGF1bmNoJywgdGVsZW1ldHJ5U2VydmljZT8udGVsZW1ldHJ5UGFnZUlkKVwiKGNsaWNrKT1cImJhY2soKTtcIj48aSBjbGFzcz1cImFycm93IGxlZnQgaWNvbiBmcy0xXCI+PC9pPjwvYnV0dG9uPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibWwtOCBzYi1jb2xvci13aGl0ZVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1haS1jZW50ZXIgZnNtYWxsXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9udC13ZWlnaHQtYm9sZCBmcy0xLTE2XCI+e3tjb25maWdTZXJ2aWNlLmxhYmVsQ29uZmlnPy5sYmw/LmFkZEZyb21MaWJyYXJ5fX08L2Rpdj5cbiAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cInNiLWJvcmRlci12ZXJ0aWNhbCBteC0xNVwiPjwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC13cmFwXCI+XG4gICAgICAgICAgICAgIDxoNT5DaGFwdGVyIDE8L2g1PlxuICAgICAgICAgICAgICA8c3Bhbj5TY2llbmNlPC9zcGFuPjxzcGFuIGNsYXNzPVwiYWRkLXRvLWxpYnJhcnktZG90XCI+PC9zcGFuPjxzcGFuPkNsYXNzIDEwPC9zcGFuPjxzcGFuXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJhZGQtdG8tbGlicmFyeS1kb3RcIj48L3NwYW4+PHNwYW4+RFAtMTIwNTwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PiAtLT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48IS0tIEZpbHRlciAtLT5cbiAgPGxpYi1saWJyYXJ5LWZpbHRlciAqbmdJZj1cIiFzaG93TG9hZGVyXCIgW2ZpbHRlclZhbHVlc109XCJkZWZhdWx0RmlsdGVyc1wiIFtzZWFyY2hGb3JtQ29uZmlnXT1cInNlYXJjaEZvcm1Db25maWdcIiBbZmlsdGVyT3BlblN0YXR1c109XCJpc0ZpbHRlck9wZW5cIiBbZnJhbWV3b3JrSWRdPVwiZnJhbWV3b3JrSWRcIiAoZmlsdGVyQ2hhbmdlRXZlbnQpPVwib25GaWx0ZXJDaGFuZ2UoJGV2ZW50KTtcIj48L2xpYi1saWJyYXJ5LWZpbHRlcj5cbiAgPGRpdiBjbGFzcz1cInVpIGNvbnRhaW5lciBzYi1jb250YWluZXIgbWluLWgtNTAwXCIgKm5nSWY9XCIhc2hvd0xvYWRlciAmJiBjb250ZW50TGlzdD8ubGVuZ3RoXCI+XG4gICAgPCEtLSBQbGF5ZXIgU2VjdGlvbiAtLT5cbiAgICA8ZGl2IGNsYXNzPVwic2ItZyBhZGQtdG8tbGlicmFyeV9fdG9jLXBsYXllclwiPlxuICAgICAgPCEtLSBMZWZ0IFNpZGViYXIgZm9yIGNhcmRzIC0tPlxuICAgICAgPHNlY3Rpb24gY2xhc3M9XCJzYi1nLWNvbC14cy0xMiBzYi1nLWNvbC1tZC00IHNiLWctY29sLWxnLTRcIj5cbiAgICAgICAgICA8bGliLWxpYnJhcnktbGlzdCAoY29udGVudENoYW5nZUV2ZW50KT0gXCJvbkNvbnRlbnRDaGFuZ2VFdmVudCgkZXZlbnQpXCIgW3NlbGVjdGVkQ29udGVudF0gPSBcInNlbGVjdGVkQ29udGVudFwiW2NvbnRlbnRMaXN0XT1cImNvbnRlbnRMaXN0XCIgW3Nob3dBZGRlZENvbnRlbnRdPVwic2hvd0FkZGVkQ29udGVudFwiIChtb3ZlRXZlbnQpPVwic2hvd1Jlc291cmNlVGVtcGxhdGUoJGV2ZW50KVwiPjwvbGliLWxpYnJhcnktbGlzdD5cbiAgICAgIDwvc2VjdGlvbj5cbiAgICAgIDwhLS0gUmlnaHQgUGxheWVyIFNlY3Rpb25zIC0tPlxuICAgICAgPHNlY3Rpb24gY2xhc3M9XCJzYi1nLWNvbC14cy0xMiBzYi1nLWNvbC1tZC04IHNiLWctY29sLWxnLTggcmVsYXRpdmUgcG9zaXRpb24gbWwtMjRcIj5cbiAgICAgICAgICA8bGliLWxpYnJhcnktcGxheWVyIFtjb250ZW50TGlzdERldGFpbHNdPVwic2VsZWN0ZWRDb250ZW50XCIgKG1vdmVFdmVudCk9XCJzaG93UmVzb3VyY2VUZW1wbGF0ZSgkZXZlbnQpXCI+PC9saWItbGlicmFyeS1wbGF5ZXI+XG4gICAgICA8L3NlY3Rpb24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG48ZGl2IGNsYXNzPVwicmVzdWx0LW5vLWZvdW5kXCI+XG4gIDxkaXYgY2xhc3M9XCJ1aSBjb250YWluZXIgc2ItY29udGFpbmVyXCIgKm5nSWY9XCJzaG93TG9hZGVyXCI+XG4gICAgPGRpdiBjbGFzcz1cInNiLWcgYWRkLXRvLWxpYnJhcnlfX3RvYy1wbGF5ZXIgbWwtMzBcIj5cbiAgICAgIDwhLS0gTGVmdCBTaWRlYmFyIGZvciBjYXJkcyAtLT5cbiAgICAgIDxzZWN0aW9uIGNsYXNzPVwic2ItZy1jb2wteHMtMTIgc2ItZy1jb2wtbWQtNCBzYi1nLWNvbC1sZy00XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzYnRvYy1jb250YWluZXIgcHItOCBtdC0yMFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzYmFjY29yZGlvbl9fcGFuZWwtY29udGVudCBwLTE2IG1iLTggc2ItZG9jay1za2VsZXRvbi1ieFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNiY2hhcHRlcl9faXRlbVwiICpuZ0Zvcj1cImxldCBudW1iZXIgb2YgW10uY29uc3RydWN0b3IoNClcIj5cbiAgICAgICAgICAgICAgPGxpYi1za2VsZXRvbi1sb2FkZXIgW3dpZHRoXT1cIic5MCUnXCIgW2hlaWdodF09XCInMTJweCdcIiBjbGFzcz1cInNiLWRvY2stZmxleC1hdXRvXCI+PC9saWItc2tlbGV0b24tbG9hZGVyPlxuICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxsaWItc2tlbGV0b24tbG9hZGVyIFt3aWR0aF09XCInMzAlJ1wiIFtoZWlnaHRdPVwiJzEycHgnXCIgY2xhc3M9XCJzYi1kb2NrLWZsZXgtYXV0b1wiPjwvbGliLXNrZWxldG9uLWxvYWRlcj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L3NlY3Rpb24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG48ZGl2ICpuZ0lmPVwic2hvd1NlbGVjdFJlc291cmNlTW9kYWxcIj5cbiAgPGxpYi1yZXNvdXJjZS1yZW9yZGVyIFtwcmV2VW5pdFNlbGVjdF09IFwic2VsZWN0ZWRVbml0XCIgW2NvbGxlY3Rpb25oaWVyYXJjeURhdGFdPVwiY29sbGVjdGlvbmhpZXJhcmN5RGF0YVwiIFtjb2xsZWN0aW9uVW5pdHNdPVwiY29sbGVjdGlvbkhpZXJhcmNoeVwiIFtzZWxlY3RlZENvbnRlbnREZXRhaWxzXT1cInNlbGVjdGVkQ29udGVudFwiIFtjb2xsZWN0aW9uSWRdPVwiY29sbGVjdGlvbklkXCIgKG1vdmVFdmVudCk9XCJzaG93UmVzb3VyY2VUZW1wbGF0ZSgkZXZlbnQpXCI+PC9saWItcmVzb3VyY2UtcmVvcmRlcj5cbjwvZGl2PlxuXG48IS0tZW1wdHkgcmVzdWx0IC0tPlxuPGRpdiBjbGFzcz1cInJlc3VsdC1uby1mb3VuZFwiPlxuICA8ZGl2IGNsYXNzPVwidWkgY29udGFpbmVyIHNiLWNvbnRhaW5lclwiICpuZ0lmPVwiIXNob3dMb2FkZXIgJiYgIWNvbnRlbnRMaXN0Py5sZW5ndGhcIj5cbiAgICA8ZGl2IGNsYXNzPVwiYWRkLXRvLWxpYnJhcnlfX25vLXJlc3VsdFwiPlxuICAgICAgPGg1IGNsYXNzPVwiZm9udC13ZWlnaHQtYm9sZFwiPnt7Y29uZmlnU2VydmljZS5sYWJlbENvbmZpZz8ubGJsPy5ub01hdGNoaW5nQ29udGVudH19PC9oNT5cbiAgICAgIDxpbWcgYWx0PVwiTm8gQ29udGVudCBhdmFpbGFibGVcIiBjbGFzcz1cIm10LTE2XCIgc3JjPVwiYXNzZXRzL2ltYWdlcy9lbXB0eVJlc3VsdC5zdmdcIj5cbiAgICAgIDxoNiBjbGFzcz1cInNiLWNvbG9yLWdyYXktMzAwIGZvbnQtd2VpZ2h0LW5vcm1hbCBtdC04XCI+e3tjb25maWdTZXJ2aWNlLmxhYmVsQ29uZmlnPy5sYmw/LmNoYW5nZUZpbHRlck1lc3NhZ2V9fTwvaDY+XG4gICAgICA8YnV0dG9uIGNsYXNzPVwic2ItYnRuIHNiLWJ0bi1zZWNvbmRhcnkgc2ItYnRuLW5vcm1hbCBtdC0xNlwiIGxpYlRlbGVtZXRyeUludGVyYWN0XG4gICAgICBbdGVsZW1ldHJ5SW50ZXJhY3RFZGF0YV09XCJ0ZWxlbWV0cnlTZXJ2aWNlLmdldFRlbGVtZXRyeUludGVyYWN0RWRhdGEoJ2NoYW5nZV9maWx0ZXInLCdjbGljaycsJ2xhdW5jaCcsIHRlbGVtZXRyeVNlcnZpY2U/LnRlbGVtZXRyeVBhZ2VJZClcIiAoY2xpY2spPVwib3BlbkZpbHRlcigpO1wiPnt7Y29uZmlnU2VydmljZS5sYWJlbENvbmZpZz8ubGJsPy5jaGFuZ2VGaWx0ZXJ9fTwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PiJdfQ==
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
import { Component, Input, Output, EventEmitter, ViewEncapsulation } from '@angular/core';
|
|
2
|
+
import * as _ from 'lodash-es';
|
|
3
|
+
import { Subject } from 'rxjs';
|
|
4
|
+
import { takeUntil, filter, take } from 'rxjs/operators';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
import * as i1 from "../../services/framework/framework.service";
|
|
7
|
+
import * as i2 from "../../services/editor/editor.service";
|
|
8
|
+
import * as i3 from "../../services/telemetry/telemetry.service";
|
|
9
|
+
import * as i4 from "../../services/tree/tree.service";
|
|
10
|
+
import * as i5 from "../../services/config/config.service";
|
|
11
|
+
import * as i6 from "../../services/helper/helper.service";
|
|
12
|
+
import * as i7 from "@angular/common";
|
|
13
|
+
import * as i8 from "@angular/forms";
|
|
14
|
+
import * as i9 from "@project-sunbird/common-form-elements-full";
|
|
15
|
+
import * as i10 from "../../directives/telemetry-interact/telemetry-interact.directive";
|
|
16
|
+
export class LibraryFilterComponent {
|
|
17
|
+
constructor(frameworkService, editorService, telemetryService, treeService, configService, helperService) {
|
|
18
|
+
this.frameworkService = frameworkService;
|
|
19
|
+
this.editorService = editorService;
|
|
20
|
+
this.telemetryService = telemetryService;
|
|
21
|
+
this.treeService = treeService;
|
|
22
|
+
this.configService = configService;
|
|
23
|
+
this.helperService = helperService;
|
|
24
|
+
this.filterChangeEvent = new EventEmitter();
|
|
25
|
+
this.isFilterShow = false;
|
|
26
|
+
this.onComponentDestroy$ = new Subject();
|
|
27
|
+
this.frameworkDetails = {};
|
|
28
|
+
}
|
|
29
|
+
ngOnInit() {
|
|
30
|
+
this.filterFields = this.searchFormConfig;
|
|
31
|
+
const selectedNode = this.treeService.getActiveNode();
|
|
32
|
+
let contentTypes = _.flatten(_.map(_.get(this.editorService.editorConfig.config, `hierarchy.level${selectedNode.getLevel() - 1}.children`), (val) => {
|
|
33
|
+
return val;
|
|
34
|
+
}));
|
|
35
|
+
if (_.isEmpty(contentTypes)) {
|
|
36
|
+
contentTypes = _.map(this.helperService.contentPrimaryCategories, 'name');
|
|
37
|
+
}
|
|
38
|
+
this.currentFilters = {
|
|
39
|
+
primaryCategory: contentTypes
|
|
40
|
+
};
|
|
41
|
+
this.setFilterDefaultValues();
|
|
42
|
+
this.fetchFrameWorkDetails();
|
|
43
|
+
}
|
|
44
|
+
setFilterDefaultValues() {
|
|
45
|
+
_.forEach(this.filterFields, (field) => {
|
|
46
|
+
if (this.filterValues[field.code]) {
|
|
47
|
+
field.default = this.filterValues[field.code];
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
ngOnChanges() {
|
|
52
|
+
this.isFilterShow = this.filterOpenStatus;
|
|
53
|
+
}
|
|
54
|
+
fetchFrameWorkDetails() {
|
|
55
|
+
this.frameworkService.frameworkData$.pipe(takeUntil(this.onComponentDestroy$), filter(data => _.get(data, `frameworkdata.${this.frameworkId}`)), take(1)).subscribe((frameworkDetails) => {
|
|
56
|
+
if (frameworkDetails && !frameworkDetails.err) {
|
|
57
|
+
const frameworkData = frameworkDetails.frameworkdata[this.frameworkId].categories;
|
|
58
|
+
this.frameworkDetails.frameworkData = frameworkData;
|
|
59
|
+
this.frameworkDetails.topicList = _.get(_.find(frameworkData, {
|
|
60
|
+
code: 'topic'
|
|
61
|
+
}), 'terms');
|
|
62
|
+
this.frameworkDetails.targetFrameworks = _.filter(frameworkDetails.frameworkdata, (value, key) => {
|
|
63
|
+
return _.includes(this.frameworkService.targetFrameworkIds, key);
|
|
64
|
+
});
|
|
65
|
+
this.populateFilters();
|
|
66
|
+
}
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
populateFilters() {
|
|
70
|
+
const categoryMasterList = this.frameworkDetails.frameworkData;
|
|
71
|
+
_.forEach(categoryMasterList, (category) => {
|
|
72
|
+
_.forEach(this.filterFields, (formFieldCategory) => {
|
|
73
|
+
if (category.code === formFieldCategory.code) {
|
|
74
|
+
formFieldCategory.terms = category.terms;
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
});
|
|
78
|
+
const index = this.filterFields.findIndex(e => _.get(e, 'code') === 'primaryCategory');
|
|
79
|
+
if (index !== -1) {
|
|
80
|
+
this.filterFields[index].range = this.currentFilters.primaryCategory;
|
|
81
|
+
}
|
|
82
|
+
this.filterConfig = [{
|
|
83
|
+
name: 'searchForm',
|
|
84
|
+
fields: this.filterFields
|
|
85
|
+
}];
|
|
86
|
+
}
|
|
87
|
+
onQueryEnter(event) {
|
|
88
|
+
this.emitApplyFilter();
|
|
89
|
+
return false;
|
|
90
|
+
}
|
|
91
|
+
showfilter() {
|
|
92
|
+
this.isFilterShow = !this.isFilterShow;
|
|
93
|
+
this.filterChangeEvent.emit({
|
|
94
|
+
action: 'filterStatusChange',
|
|
95
|
+
filterStatus: this.isFilterShow
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
resetFilter() {
|
|
99
|
+
this.filterValues = {
|
|
100
|
+
primaryCategory: _.map(this.helperService.contentPrimaryCategories, 'name')
|
|
101
|
+
};
|
|
102
|
+
this.searchQuery = '';
|
|
103
|
+
_.forEach(this.filterFields, (field) => {
|
|
104
|
+
field.default = '';
|
|
105
|
+
});
|
|
106
|
+
this.filterConfig = null;
|
|
107
|
+
this.filterConfig = [{
|
|
108
|
+
name: 'searchForm',
|
|
109
|
+
fields: _.cloneDeep(this.filterFields)
|
|
110
|
+
}];
|
|
111
|
+
this.emitApplyFilter();
|
|
112
|
+
}
|
|
113
|
+
applyFilter() {
|
|
114
|
+
this.emitApplyFilter();
|
|
115
|
+
}
|
|
116
|
+
emitApplyFilter() {
|
|
117
|
+
this.filterChangeEvent.emit({
|
|
118
|
+
action: 'filterDataChange',
|
|
119
|
+
filters: this.filterValues,
|
|
120
|
+
query: this.searchQuery
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
outputData($event) {
|
|
124
|
+
}
|
|
125
|
+
onStatusChanges($event) {
|
|
126
|
+
}
|
|
127
|
+
valueChanges($event) {
|
|
128
|
+
this.filterValues = $event;
|
|
129
|
+
}
|
|
130
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: LibraryFilterComponent, deps: [{ token: i1.FrameworkService }, { token: i2.EditorService }, { token: i3.EditorTelemetryService }, { token: i4.TreeService }, { token: i5.ConfigService }, { token: i6.HelperService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
131
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: LibraryFilterComponent, selector: "lib-library-filter", inputs: { sessionContext: "sessionContext", filterValues: "filterValues", filterOpenStatus: "filterOpenStatus", searchFormConfig: "searchFormConfig", frameworkId: "frameworkId" }, outputs: { filterChangeEvent: "filterChangeEvent" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"sb-prominent-filter sb-bg-header-blue\">\n <div class=\"ui container pt-5 pb-20\">\n <div class=\"d-flex flex-w-wrap flex-jc-space-between flex-ai-center\">\n <div class=\"sb-search-box small no-btn\">\n <div class=\"input-div relative\">\n <i class=\"search icon\"></i>\n <input id=\"searchInputField\" class=\"sb-search-input\" [(ngModel)]=\"searchQuery\" type=\"text\" (keyup.enter)=\"onQueryEnter($event);\" placeholder={{configService.labelConfig?.lbl?.searchLibrary}}\n libTelemetryInteract\n [telemetryInteractEdata]=\"telemetryService.getTelemetryInteractEdata('search_library','click',undefined, this.telemetryService?.telemetryPageId)\"/>\n </div>\n <button class=\"sb-btn sb-btn-normal\">{{configService.labelConfig?.lbl?.search}}</button>\n </div>\n <div class=\"fs-0-785 cursor-pointer\" (click)=\"showfilter()\"\n libTelemetryInteract\n [telemetryInteractEdata]=\"telemetryService.getTelemetryInteractEdata('filter_accordion','click',undefined, this.telemetryService?.telemetryPageId)\">\n {{configService.labelConfig?.lbl?.filterText}}\n <i *ngIf=\"isFilterShow\" class=\"caret up icon\"></i>\n <i *ngIf=\"!isFilterShow\" class=\"caret down icon\"></i>\n </div>\n </div>\n\n <div class=\"library-filter pt-16\" *ngIf=\"isFilterShow\">\n <hr class=\"mb-20\">\n <ng-container *ngIf=\"filterConfig\">\n <sb-dynamic-form [config]=\"filterConfig\" (initialize)=\"outputData($event)\"\n (statusChanges)=\"onStatusChanges($event)\" (valueChanges)=\"valueChanges($event)\"></sb-dynamic-form>\n </ng-container>\n <div class=\"d-flex flex-as-center pt-10 sb-btn-cover flex-jc-space-end\">\n <button type=\"button\" class=\"sb-btn sb-btn-normal sb-btn-outline-primary ml-5\" (click)=\"resetFilter();\"\n libTelemetryInteract\n [telemetryInteractEdata]=\"telemetryService.getTelemetryInteractEdata('reset','click','submit', this.telemetryService?.telemetryPageId)\"\n >{{configService.labelConfig?.button_labels?.reset_btn_label}}</button>\n <button type=\"button\" class=\"sb-btn sb-btn-normal sb-btn-primary ml-15\" (click)=\"applyFilter();\"\n libTelemetryInteract\n [telemetryInteractEdata]=\"telemetryService.getTelemetryInteractEdata('apply','click','submit', this.telemetryService?.telemetryPageId, {filters: filterValues})\"\n >{{configService.labelConfig?.button_labels?.apply_btn_label}}</button>\n </div>\n </div>\n </div>\n</div>", styles: [".library-filter .two-column-grid{grid-template-columns:repeat(3,1fr)}.library-filter .list-border.cursor-pointer{margin-top:12px}.library-filter .list-border{background:#fff}.library-filter sb-dynamic-dropdown .sb-dropdown-select{margin-top:.1rem;padding:14px 8px!important}.library-filter .ui.modals{z-index:9999!important}.sb-search-box .sb-search-input{padding:0 3.5rem 0 2rem!important}.sb-prominent-filter-field{width:33.2%!important}.sb-prominent-filter{position:relative;top:unset;box-shadow:none}.sb-prominent-filter:nth-child(6){padding-right:0}.sb-prominent-filter .sb-search-box{width:36%;border:1px solid var(--gray-200)}.sb-prominent-filter .sb-search-box .search.icon:before{color:#bbb7b2}.sb-prominent-filter .sb-search-box .sb-search-input{padding:.5rem}.sb-prominent-filter .small{max-width:inherit}.sb-prominent-filter .sb-prominent-filter-field{cursor:pointer}.sb-prominent-filter .sb-prominent-filter-field:last-child{text-align:inherit!important;margin:inherit!important}.sb-prominent-filter .sb-prominent-filter-field .ui.selection.dropdown{border-color:#999}.sb-prominent-filter .sb-prominent-filter-field ::ng-deep .ui.selection.dropdown .text{padding-left:.7rem;text-transform:none}.sb-prominent-filter .sb-prominent-filter-field ::ng-deep .ui.search.dropdown>input.search{left:0}.sb-prominent-filter .sb-prominent-filter-field ::ng-deep .ui.search.selection.dropdown>input.search{line-height:1.21428571em;padding:.67857143em 2.1em .67857143em 1em}.sb-prominent-filter .sb-prominent-filter-field ::ng-deep .ui.multiple.search.dropdown>input.search{margin:0}.sb-prominent-filter .sb-prominent-filter-field ::ng-deep .ui.multiple.search.dropdown>.text{top:2px}.sb-prominent-filter .sb-prominent-filter-field ::ng-deep .ui.multiple.dropdown .label{margin:.25rem;vertical-align:middle}.sb-prominent-filter .sb-prominent-filter-field ::ng-deep .ui.multiple.dropdown>.text{line-height:1.4rem;vertical-align:bottom;padding:0 0 0 .7rem}.flex-jc-space-end{justify-content:flex-end!important}.multi-select-container .list-border{height:inherit!important}.multi-select-container .list-border ul{position:static!important;padding:0 20px 0 0!important}.ui.modals{z-index:9999!important}\n"], dependencies: [{ kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i8.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i8.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i8.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i9.DynamicFormComponent, selector: "sb-dynamic-form", inputs: ["config", "dataLoadStatusDelegate"], outputs: ["initialize", "finalize", "valueChanges", "statusChanges"] }, { kind: "directive", type: i10.TelemetryInteractDirective, selector: "[libTelemetryInteract]", inputs: ["telemetryInteractEdata"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
132
|
+
}
|
|
133
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: LibraryFilterComponent, decorators: [{
|
|
134
|
+
type: Component,
|
|
135
|
+
args: [{ selector: 'lib-library-filter', encapsulation: ViewEncapsulation.None, template: "<div class=\"sb-prominent-filter sb-bg-header-blue\">\n <div class=\"ui container pt-5 pb-20\">\n <div class=\"d-flex flex-w-wrap flex-jc-space-between flex-ai-center\">\n <div class=\"sb-search-box small no-btn\">\n <div class=\"input-div relative\">\n <i class=\"search icon\"></i>\n <input id=\"searchInputField\" class=\"sb-search-input\" [(ngModel)]=\"searchQuery\" type=\"text\" (keyup.enter)=\"onQueryEnter($event);\" placeholder={{configService.labelConfig?.lbl?.searchLibrary}}\n libTelemetryInteract\n [telemetryInteractEdata]=\"telemetryService.getTelemetryInteractEdata('search_library','click',undefined, this.telemetryService?.telemetryPageId)\"/>\n </div>\n <button class=\"sb-btn sb-btn-normal\">{{configService.labelConfig?.lbl?.search}}</button>\n </div>\n <div class=\"fs-0-785 cursor-pointer\" (click)=\"showfilter()\"\n libTelemetryInteract\n [telemetryInteractEdata]=\"telemetryService.getTelemetryInteractEdata('filter_accordion','click',undefined, this.telemetryService?.telemetryPageId)\">\n {{configService.labelConfig?.lbl?.filterText}}\n <i *ngIf=\"isFilterShow\" class=\"caret up icon\"></i>\n <i *ngIf=\"!isFilterShow\" class=\"caret down icon\"></i>\n </div>\n </div>\n\n <div class=\"library-filter pt-16\" *ngIf=\"isFilterShow\">\n <hr class=\"mb-20\">\n <ng-container *ngIf=\"filterConfig\">\n <sb-dynamic-form [config]=\"filterConfig\" (initialize)=\"outputData($event)\"\n (statusChanges)=\"onStatusChanges($event)\" (valueChanges)=\"valueChanges($event)\"></sb-dynamic-form>\n </ng-container>\n <div class=\"d-flex flex-as-center pt-10 sb-btn-cover flex-jc-space-end\">\n <button type=\"button\" class=\"sb-btn sb-btn-normal sb-btn-outline-primary ml-5\" (click)=\"resetFilter();\"\n libTelemetryInteract\n [telemetryInteractEdata]=\"telemetryService.getTelemetryInteractEdata('reset','click','submit', this.telemetryService?.telemetryPageId)\"\n >{{configService.labelConfig?.button_labels?.reset_btn_label}}</button>\n <button type=\"button\" class=\"sb-btn sb-btn-normal sb-btn-primary ml-15\" (click)=\"applyFilter();\"\n libTelemetryInteract\n [telemetryInteractEdata]=\"telemetryService.getTelemetryInteractEdata('apply','click','submit', this.telemetryService?.telemetryPageId, {filters: filterValues})\"\n >{{configService.labelConfig?.button_labels?.apply_btn_label}}</button>\n </div>\n </div>\n </div>\n</div>", styles: [".library-filter .two-column-grid{grid-template-columns:repeat(3,1fr)}.library-filter .list-border.cursor-pointer{margin-top:12px}.library-filter .list-border{background:#fff}.library-filter sb-dynamic-dropdown .sb-dropdown-select{margin-top:.1rem;padding:14px 8px!important}.library-filter .ui.modals{z-index:9999!important}.sb-search-box .sb-search-input{padding:0 3.5rem 0 2rem!important}.sb-prominent-filter-field{width:33.2%!important}.sb-prominent-filter{position:relative;top:unset;box-shadow:none}.sb-prominent-filter:nth-child(6){padding-right:0}.sb-prominent-filter .sb-search-box{width:36%;border:1px solid var(--gray-200)}.sb-prominent-filter .sb-search-box .search.icon:before{color:#bbb7b2}.sb-prominent-filter .sb-search-box .sb-search-input{padding:.5rem}.sb-prominent-filter .small{max-width:inherit}.sb-prominent-filter .sb-prominent-filter-field{cursor:pointer}.sb-prominent-filter .sb-prominent-filter-field:last-child{text-align:inherit!important;margin:inherit!important}.sb-prominent-filter .sb-prominent-filter-field .ui.selection.dropdown{border-color:#999}.sb-prominent-filter .sb-prominent-filter-field ::ng-deep .ui.selection.dropdown .text{padding-left:.7rem;text-transform:none}.sb-prominent-filter .sb-prominent-filter-field ::ng-deep .ui.search.dropdown>input.search{left:0}.sb-prominent-filter .sb-prominent-filter-field ::ng-deep .ui.search.selection.dropdown>input.search{line-height:1.21428571em;padding:.67857143em 2.1em .67857143em 1em}.sb-prominent-filter .sb-prominent-filter-field ::ng-deep .ui.multiple.search.dropdown>input.search{margin:0}.sb-prominent-filter .sb-prominent-filter-field ::ng-deep .ui.multiple.search.dropdown>.text{top:2px}.sb-prominent-filter .sb-prominent-filter-field ::ng-deep .ui.multiple.dropdown .label{margin:.25rem;vertical-align:middle}.sb-prominent-filter .sb-prominent-filter-field ::ng-deep .ui.multiple.dropdown>.text{line-height:1.4rem;vertical-align:bottom;padding:0 0 0 .7rem}.flex-jc-space-end{justify-content:flex-end!important}.multi-select-container .list-border{height:inherit!important}.multi-select-container .list-border ul{position:static!important;padding:0 20px 0 0!important}.ui.modals{z-index:9999!important}\n"] }]
|
|
136
|
+
}], ctorParameters: function () { return [{ type: i1.FrameworkService }, { type: i2.EditorService }, { type: i3.EditorTelemetryService }, { type: i4.TreeService }, { type: i5.ConfigService }, { type: i6.HelperService }]; }, propDecorators: { sessionContext: [{
|
|
137
|
+
type: Input
|
|
138
|
+
}], filterValues: [{
|
|
139
|
+
type: Input
|
|
140
|
+
}], filterOpenStatus: [{
|
|
141
|
+
type: Input
|
|
142
|
+
}], searchFormConfig: [{
|
|
143
|
+
type: Input
|
|
144
|
+
}], frameworkId: [{
|
|
145
|
+
type: Input
|
|
146
|
+
}], filterChangeEvent: [{
|
|
147
|
+
type: Output
|
|
148
|
+
}] } });
|
|
149
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlicmFyeS1maWx0ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29sbGVjdGlvbi1lZGl0b3ItbGlicmFyeS9zcmMvbGliL2NvbXBvbmVudHMvbGlicmFyeS1maWx0ZXIvbGlicmFyeS1maWx0ZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29sbGVjdGlvbi1lZGl0b3ItbGlicmFyeS9zcmMvbGliL2NvbXBvbmVudHMvbGlicmFyeS1maWx0ZXIvbGlicmFyeS1maWx0ZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBYSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3RyxPQUFPLEtBQUssQ0FBQyxNQUFNLFdBQVcsQ0FBQztBQUMvQixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7Ozs7QUFjekQsTUFBTSxPQUFPLHNCQUFzQjtJQWdCakMsWUFBb0IsZ0JBQWtDLEVBQ25DLGFBQTRCLEVBQzVCLGdCQUF3QyxFQUN4QyxXQUF3QixFQUN4QixhQUE0QixFQUMzQixhQUE0QjtRQUw1QixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ25DLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzVCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBd0I7UUFDeEMsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDM0Isa0JBQWEsR0FBYixhQUFhLENBQWU7UUFmdEMsc0JBQWlCLEdBQXNCLElBQUksWUFBWSxFQUFFLENBQUM7UUFFN0QsaUJBQVksR0FB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LENBQUM7SUFDRCxZQUFZLENBQUMsTUFBTTtRQUNqQixJQUFJLENBQUMsWUFBWSxHQUFHLE1BQU0sQ0FBQztJQUM3QixDQUFDOytHQS9JVSxzQkFBc0I7bUdBQXRCLHNCQUFzQix3VENqQm5DLHNoRkF1Q007OzRGRHRCTyxzQkFBc0I7a0JBTmxDLFNBQVM7K0JBQ0Usb0JBQW9CLGlCQUdmLGlCQUFpQixDQUFDLElBQUk7MFBBRzVCLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0ksaUJBQWlCO3NCQUExQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgT25DaGFuZ2VzLCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZVVudGlsLCBmaWx0ZXIsIHRha2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBUcmVlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RyZWUvdHJlZS5zZXJ2aWNlJztcbmltcG9ydCB7IEVkaXRvclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9lZGl0b3IvZWRpdG9yLnNlcnZpY2UnO1xuaW1wb3J0IHsgRnJhbWV3b3JrU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2ZyYW1ld29yay9mcmFtZXdvcmsuc2VydmljZSc7XG5pbXBvcnQgeyBFZGl0b3JUZWxlbWV0cnlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdGVsZW1ldHJ5L3RlbGVtZXRyeS5zZXJ2aWNlJztcbmltcG9ydCB7IENvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jb25maWcvY29uZmlnLnNlcnZpY2UnO1xuaW1wb3J0IHsgSGVscGVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2hlbHBlci9oZWxwZXIuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpYi1saWJyYXJ5LWZpbHRlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9saWJyYXJ5LWZpbHRlci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2xpYnJhcnktZmlsdGVyLmNvbXBvbmVudC5zY3NzJ10sXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG59KVxuZXhwb3J0IGNsYXNzIExpYnJhcnlGaWx0ZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XG4gIEBJbnB1dCgpIHNlc3Npb25Db250ZXh0OiBhbnk7XG4gIEBJbnB1dCgpIGZpbHRlclZhbHVlczogYW55O1xuICBASW5wdXQoKSBmaWx0ZXJPcGVuU3RhdHVzOiBib29sZWFuO1xuICBASW5wdXQoKSBzZWFyY2hGb3JtQ29uZmlnOiBhbnk7XG4gIEBJbnB1dCgpIGZyYW1ld29ya0lkOiBhbnk7XG4gIEBPdXRwdXQoKSBmaWx0ZXJDaGFuZ2VFdmVudDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIHB1YmxpYyBmaWx0ZXJDb25maWc6IGFueTtcbiAgcHVibGljIGlzRmlsdGVyU2hvdyA9IGZhbHNlO1xuICBwdWJsaWMgZmlsdGVyRmllbGRzOiBhbnk7XG4gIHB1YmxpYyB0ZWxlbWV0cnlQYWdlSWQ6IHN0cmluZztcbiAgcHJpdmF0ZSBvbkNvbXBvbmVudERlc3Ryb3kkID0gbmV3IFN1YmplY3Q8YW55PigpO1xuICBwdWJsaWMgZnJhbWV3b3JrRGV0YWlsczogYW55ID0ge307XG4gIHB1YmxpYyBjdXJyZW50RmlsdGVyczogYW55O1xuICBwdWJsaWMgc2VhcmNoUXVlcnk6IHN0cmluZztcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGZyYW1ld29ya1NlcnZpY2U6IEZyYW1ld29ya1NlcnZpY2UsXG4gICAgICAgICAgICAgIHB1YmxpYyBlZGl0b3JTZXJ2aWNlOiBFZGl0b3JTZXJ2aWNlLFxuICAgICAgICAgICAgICBwdWJsaWMgdGVsZW1ldHJ5U2VydmljZTogRWRpdG9yVGVsZW1ldHJ5U2VydmljZSxcbiAgICAgICAgICAgICAgcHVibGljIHRyZWVTZXJ2aWNlOiBUcmVlU2VydmljZSxcbiAgICAgICAgICAgICAgcHVibGljIGNvbmZpZ1NlcnZpY2U6IENvbmZpZ1NlcnZpY2UsXG4gICAgICAgICAgICAgIHByaXZhdGUgaGVscGVyU2VydmljZTogSGVscGVyU2VydmljZSkgeyB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5maWx0ZXJGaWVsZHMgPSB0aGlzLnNlYXJjaEZvcm1Db25maWc7XG4gICAgY29uc3Qgc2VsZWN0ZWROb2RlID0gdGhpcy50cmVlU2VydmljZS5nZXRBY3RpdmVOb2RlKCk7XG4gICAgbGV0IGNvbnRlbnRUeXBlcyA9IF8uZmxhdHRlbihcbiAgICAgIF8ubWFwKF8uZ2V0KHRoaXMuZWRpdG9yU2VydmljZS5lZGl0b3JDb25maWcuY29uZmlnLCBgaGllcmFyY2h5LmxldmVsJHtzZWxlY3RlZE5vZGUuZ2V0TGV2ZWwoKSAtIDF9LmNoaWxkcmVuYCksICh2YWwpID0+IHtcbiAgICAgIHJldHVybiB2YWw7XG4gICAgfSkpO1xuXG4gICAgaWYgKF8uaXNFbXB0eShjb250ZW50VHlwZXMpKSB7XG4gICAgICBjb250ZW50VHlwZXMgPSBfLm1hcCh0aGlzLmhlbHBlclNlcnZpY2UuY29udGVudFByaW1hcnlDYXRlZ29yaWVzLCAnbmFtZScpO1xuICAgIH1cblxuICAgIHRoaXMuY3VycmVudEZpbHRlcnMgPSB7XG4gICAgICBwcmltYXJ5Q2F0ZWdvcnk6IGNvbnRlbnRUeXBlc1xuICAgIH07XG4gICAgdGhpcy5zZXRGaWx0ZXJEZWZhdWx0VmFsdWVzKCk7XG4gICAgdGhpcy5mZXRjaEZyYW1lV29ya0RldGFpbHMoKTtcbiAgfVxuXG4gIHNldEZpbHRlckRlZmF1bHRWYWx1ZXMoKSB7XG4gICAgXy5mb3JFYWNoKHRoaXMuZmlsdGVyRmllbGRzLCAoZmllbGQpID0+IHtcbiAgICAgIGlmICh0aGlzLmZpbHRlclZhbHVlc1tmaWVsZC5jb2RlXSkge1xuICAgICAgICBmaWVsZC5kZWZhdWx0ID0gdGhpcy5maWx0ZXJWYWx1ZXNbZmllbGQuY29kZV07XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcygpIHtcbiAgICB0aGlzLmlzRmlsdGVyU2hvdyA9IHRoaXMuZmlsdGVyT3BlblN0YXR1cztcbiAgfVxuXG4gIGZldGNoRnJhbWVXb3JrRGV0YWlscygpIHtcbiAgICB0aGlzLmZyYW1ld29ya1NlcnZpY2UuZnJhbWV3b3JrRGF0YSQucGlwZShcbiAgICAgIHRha2VVbnRpbCh0aGlzLm9uQ29tcG9uZW50RGVzdHJveSQpLFxuICAgICAgZmlsdGVyKGRhdGEgPT4gXy5nZXQoZGF0YSwgYGZyYW1ld29ya2RhdGEuJHt0aGlzLmZyYW1ld29ya0lkfWApKSxcbiAgICAgIHRha2UoMSlcbiAgICApLnN1YnNjcmliZSgoZnJhbWV3b3JrRGV0YWlsczogYW55KSA9PiB7XG4gICAgICBpZiAoZnJhbWV3b3JrRGV0YWlscyAmJiAhZnJhbWV3b3JrRGV0YWlscy5lcnIpIHtcbiAgICAgICAgY29uc3QgZnJhbWV3b3JrRGF0YSA9IGZyYW1ld29ya0RldGFpbHMuZnJhbWV3b3JrZGF0YVt0aGlzLmZyYW1ld29ya0lkXS5jYXRlZ29yaWVzO1xuICAgICAgICB0aGlzLmZyYW1ld29ya0RldGFpbHMuZnJhbWV3b3JrRGF0YSA9IGZyYW1ld29ya0RhdGE7XG4gICAgICAgIHRoaXMuZnJhbWV3b3JrRGV0YWlscy50b3BpY0xpc3QgPSBfLmdldChfLmZpbmQoZnJhbWV3b3JrRGF0YSwge1xuICAgICAgICAgIGNvZGU6ICd0b3BpYydcbiAgICAgICAgfSksICd0ZXJtcycpO1xuICAgICAgICB0aGlzLmZyYW1ld29ya0RldGFpbHMudGFyZ2V0RnJhbWV3b3JrcyA9IF8uZmlsdGVyKGZyYW1ld29ya0RldGFpbHMuZnJhbWV3b3JrZGF0YSwgKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgICAgICByZXR1cm4gXy5pbmNsdWRlcyh0aGlzLmZyYW1ld29ya1NlcnZpY2UudGFyZ2V0RnJhbWV3b3JrSWRzLCBrZXkpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5wb3B1bGF0ZUZpbHRlcnMoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHBvcHVsYXRlRmlsdGVycygpIHtcbiAgICBjb25zdCBjYXRlZ29yeU1hc3Rlckxpc3QgPSB0aGlzLmZyYW1ld29ya0RldGFpbHMuZnJhbWV3b3JrRGF0YTtcbiAgICBfLmZvckVhY2goY2F0ZWdvcnlNYXN0ZXJMaXN0LCAoY2F0ZWdvcnkpID0+IHtcbiAgICAgIF8uZm9yRWFjaCh0aGlzLmZpbHRlckZpZWxkcywgKGZvcm1GaWVsZENhdGVnb3J5KSA9PiB7XG4gICAgICAgIGlmIChjYXRlZ29yeS5jb2RlID09PSBmb3JtRmllbGRDYXRlZ29yeS5jb2RlKSB7XG4gICAgICAgICAgZm9ybUZpZWxkQ2F0ZWdvcnkudGVybXMgPSBjYXRlZ29yeS50ZXJtcztcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBjb25zdCBpbmRleCA9IHRoaXMuZmlsdGVyRmllbGRzLmZpbmRJbmRleChlID0+IF8uZ2V0KGUsICdjb2RlJykgPT09ICdwcmltYXJ5Q2F0ZWdvcnknKTtcbiAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICB0aGlzLmZpbHRlckZpZWxkc1tpbmRleF0ucmFuZ2UgPSB0aGlzLmN1cnJlbnRGaWx0ZXJzLnByaW1hcnlDYXRlZ29yeTtcbiAgICB9XG5cbiAgICB0aGlzLmZpbHRlckNvbmZpZyA9IFt7XG4gICAgICBuYW1lOiAnc2VhcmNoRm9ybScsXG4gICAgICBmaWVsZHM6IHRoaXMuZmlsdGVyRmllbGRzXG4gICAgfV07XG4gIH1cblxuICBvblF1ZXJ5RW50ZXIoZXZlbnQpIHtcbiAgICB0aGlzLmVtaXRBcHBseUZpbHRlcigpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHNob3dmaWx0ZXIoKSB7XG4gICAgdGhpcy5pc0ZpbHRlclNob3cgPSAhdGhpcy5pc0ZpbHRlclNob3c7XG4gICAgdGhpcy5maWx0ZXJDaGFuZ2VFdmVudC5lbWl0KHtcbiAgICAgIGFjdGlvbjogJ2ZpbHRlclN0YXR1c0NoYW5nZScsXG4gICAgICBmaWx0ZXJTdGF0dXM6IHRoaXMuaXNGaWx0ZXJTaG93XG4gICAgfSk7XG4gIH1cblxuICByZXNldEZpbHRlcigpIHtcbiAgICB0aGlzLmZpbHRlclZhbHVlcyA9IHtcbiAgICAgIHByaW1hcnlDYXRlZ29yeTogXy5tYXAodGhpcy5oZWxwZXJTZXJ2aWNlLmNvbnRlbnRQcmltYXJ5Q2F0ZWdvcmllcywgJ25hbWUnKVxuICAgIH07XG4gICAgdGhpcy5zZWFyY2hRdWVyeSA9ICcnO1xuICAgIF8uZm9yRWFjaCh0aGlzLmZpbHRlckZpZWxkcywgKGZpZWxkKSA9PiB7XG4gICAgICBmaWVsZC5kZWZhdWx0ID0gJyc7XG4gICAgfSk7XG5cbiAgICB0aGlzLmZpbHRlckNvbmZpZyA9IG51bGw7XG4gICAgdGhpcy5maWx0ZXJDb25maWcgPSBbe1xuICAgICAgbmFtZTogJ3NlYXJjaEZvcm0nLFxuICAgICAgZmllbGRzOiBfLmNsb25lRGVlcCh0aGlzLmZpbHRlckZpZWxkcylcbiAgICB9XTtcblxuICAgIHRoaXMuZW1pdEFwcGx5RmlsdGVyKCk7XG4gIH1cblxuICBhcHBseUZpbHRlcigpIHtcbiAgICB0aGlzLmVtaXRBcHBseUZpbHRlcigpO1xuICB9XG5cbiAgZW1pdEFwcGx5RmlsdGVyKCkge1xuICAgIHRoaXMuZmlsdGVyQ2hhbmdlRXZlbnQuZW1pdCh7XG4gICAgICBhY3Rpb246ICdmaWx0ZXJEYXRhQ2hhbmdlJyxcbiAgICAgIGZpbHRlcnM6IHRoaXMuZmlsdGVyVmFsdWVzLFxuICAgICAgcXVlcnk6IHRoaXMuc2VhcmNoUXVlcnlcbiAgICB9KTtcbiAgfVxuICBvdXRwdXREYXRhKCRldmVudCkge1xuICB9XG4gIG9uU3RhdHVzQ2hhbmdlcygkZXZlbnQpIHtcbiAgfVxuICB2YWx1ZUNoYW5nZXMoJGV2ZW50KSB7XG4gICAgdGhpcy5maWx0ZXJWYWx1ZXMgPSAkZXZlbnQ7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJzYi1wcm9taW5lbnQtZmlsdGVyIHNiLWJnLWhlYWRlci1ibHVlXCI+XG4gIDxkaXYgY2xhc3M9XCJ1aSBjb250YWluZXIgcHQtNSBwYi0yMFwiPlxuICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC13LXdyYXAgZmxleC1qYy1zcGFjZS1iZXR3ZWVuIGZsZXgtYWktY2VudGVyXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwic2Itc2VhcmNoLWJveCBzbWFsbCBuby1idG5cIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWRpdiByZWxhdGl2ZVwiPlxuICAgICAgICAgIDxpIGNsYXNzPVwic2VhcmNoIGljb25cIj48L2k+XG4gICAgICAgICAgPGlucHV0IGlkPVwic2VhcmNoSW5wdXRGaWVsZFwiIGNsYXNzPVwic2Itc2VhcmNoLWlucHV0XCIgWyhuZ01vZGVsKV09XCJzZWFyY2hRdWVyeVwiIHR5cGU9XCJ0ZXh0XCIgKGtleXVwLmVudGVyKT1cIm9uUXVlcnlFbnRlcigkZXZlbnQpO1wiIHBsYWNlaG9sZGVyPXt7Y29uZmlnU2VydmljZS5sYWJlbENvbmZpZz8ubGJsPy5zZWFyY2hMaWJyYXJ5fX1cbiAgICAgICAgICBsaWJUZWxlbWV0cnlJbnRlcmFjdFxuICAgICAgICAgIFt0ZWxlbWV0cnlJbnRlcmFjdEVkYXRhXT1cInRlbGVtZXRyeVNlcnZpY2UuZ2V0VGVsZW1ldHJ5SW50ZXJhY3RFZGF0YSgnc2VhcmNoX2xpYnJhcnknLCdjbGljaycsdW5kZWZpbmVkLCB0aGlzLnRlbGVtZXRyeVNlcnZpY2U/LnRlbGVtZXRyeVBhZ2VJZClcIi8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwic2ItYnRuIHNiLWJ0bi1ub3JtYWxcIj57e2NvbmZpZ1NlcnZpY2UubGFiZWxDb25maWc/LmxibD8uc2VhcmNofX08L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImZzLTAtNzg1IGN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cInNob3dmaWx0ZXIoKVwiXG4gICAgICAgIGxpYlRlbGVtZXRyeUludGVyYWN0XG4gICAgICAgIFt0ZWxlbWV0cnlJbnRlcmFjdEVkYXRhXT1cInRlbGVtZXRyeVNlcnZpY2UuZ2V0VGVsZW1ldHJ5SW50ZXJhY3RFZGF0YSgnZmlsdGVyX2FjY29yZGlvbicsJ2NsaWNrJyx1bmRlZmluZWQsIHRoaXMudGVsZW1ldHJ5U2VydmljZT8udGVsZW1ldHJ5UGFnZUlkKVwiPlxuICAgICAgICB7e2NvbmZpZ1NlcnZpY2UubGFiZWxDb25maWc/LmxibD8uZmlsdGVyVGV4dH19XG4gICAgICAgIDxpICpuZ0lmPVwiaXNGaWx0ZXJTaG93XCIgY2xhc3M9XCJjYXJldCB1cCBpY29uXCI+PC9pPlxuICAgICAgICA8aSAqbmdJZj1cIiFpc0ZpbHRlclNob3dcIiBjbGFzcz1cImNhcmV0IGRvd24gaWNvblwiPjwvaT5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cImxpYnJhcnktZmlsdGVyIHB0LTE2XCIgKm5nSWY9XCJpc0ZpbHRlclNob3dcIj5cbiAgICAgIDxociBjbGFzcz1cIm1iLTIwXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZmlsdGVyQ29uZmlnXCI+XG4gICAgICAgIDxzYi1keW5hbWljLWZvcm0gW2NvbmZpZ109XCJmaWx0ZXJDb25maWdcIiAoaW5pdGlhbGl6ZSk9XCJvdXRwdXREYXRhKCRldmVudClcIlxuICAgICAgICAgIChzdGF0dXNDaGFuZ2VzKT1cIm9uU3RhdHVzQ2hhbmdlcygkZXZlbnQpXCIgKHZhbHVlQ2hhbmdlcyk9XCJ2YWx1ZUNoYW5nZXMoJGV2ZW50KVwiPjwvc2ItZHluYW1pYy1mb3JtPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtYXMtY2VudGVyIHB0LTEwIHNiLWJ0bi1jb3ZlciBmbGV4LWpjLXNwYWNlLWVuZFwiPlxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cInNiLWJ0biBzYi1idG4tbm9ybWFsIHNiLWJ0bi1vdXRsaW5lLXByaW1hcnkgbWwtNVwiIChjbGljayk9XCJyZXNldEZpbHRlcigpO1wiXG4gICAgICAgIGxpYlRlbGVtZXRyeUludGVyYWN0XG4gICAgICAgIFt0ZWxlbWV0cnlJbnRlcmFjdEVkYXRhXT1cInRlbGVtZXRyeVNlcnZpY2UuZ2V0VGVsZW1ldHJ5SW50ZXJhY3RFZGF0YSgncmVzZXQnLCdjbGljaycsJ3N1Ym1pdCcsIHRoaXMudGVsZW1ldHJ5U2VydmljZT8udGVsZW1ldHJ5UGFnZUlkKVwiXG4gICAgICAgID57e2NvbmZpZ1NlcnZpY2UubGFiZWxDb25maWc/LmJ1dHRvbl9sYWJlbHM/LnJlc2V0X2J0bl9sYWJlbH19PC9idXR0b24+XG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwic2ItYnRuIHNiLWJ0bi1ub3JtYWwgc2ItYnRuLXByaW1hcnkgbWwtMTVcIiAoY2xpY2spPVwiYXBwbHlGaWx0ZXIoKTtcIlxuICAgICAgICBsaWJUZWxlbWV0cnlJbnRlcmFjdFxuICAgICAgICBbdGVsZW1ldHJ5SW50ZXJhY3RFZGF0YV09XCJ0ZWxlbWV0cnlTZXJ2aWNlLmdldFRlbGVtZXRyeUludGVyYWN0RWRhdGEoJ2FwcGx5JywnY2xpY2snLCdzdWJtaXQnLCB0aGlzLnRlbGVtZXRyeVNlcnZpY2U/LnRlbGVtZXRyeVBhZ2VJZCwge2ZpbHRlcnM6IGZpbHRlclZhbHVlc30pXCJcbiAgICAgICAgPnt7Y29uZmlnU2VydmljZS5sYWJlbENvbmZpZz8uYnV0dG9uX2xhYmVscz8uYXBwbHlfYnRuX2xhYmVsfX08L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PiJdfQ==
|