@colijnit/product 12.0.7 → 12.0.8

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.
Files changed (128) hide show
  1. package/app/components/core/header/header.component.d.ts +7 -7
  2. package/app/components/core/header/header.module.d.ts +2 -2
  3. package/app/components/image-carousel/image-carousel.component.d.ts +39 -39
  4. package/app/components/image-carousel/image-carousel.module.d.ts +2 -2
  5. package/app/components/product-additional-description/product-additional-description.component.d.ts +14 -14
  6. package/app/components/product-additional-description/product-additional-description.module.d.ts +2 -2
  7. package/app/components/product-additional-info/product-additional-info.component.d.ts +21 -21
  8. package/app/components/product-additional-info/product-additional-info.module.d.ts +2 -2
  9. package/app/components/product-addtocart/product-addtocart.component.d.ts +33 -33
  10. package/app/components/product-addtocart/product-addtocart.module.d.ts +2 -2
  11. package/app/components/product-delivery/product-delivery.component.d.ts +18 -18
  12. package/app/components/product-delivery/product-delivery.module.d.ts +2 -2
  13. package/app/components/product-description/product-description.component.d.ts +7 -7
  14. package/app/components/product-description/product-description.module.d.ts +2 -2
  15. package/app/components/product-documents/product-document.module.d.ts +2 -2
  16. package/app/components/product-documents/product-documents.component.d.ts +10 -10
  17. package/app/components/product-external-source/product-external-source.component.d.ts +34 -34
  18. package/app/components/product-external-source/product-external-source.module.d.ts +2 -2
  19. package/app/components/product-info-tabs/product-info-tabs.component.d.ts +18 -18
  20. package/app/components/product-info-tabs/product-info-tabs.module.d.ts +2 -2
  21. package/app/components/product-page/product-page.component.d.ts +58 -58
  22. package/app/components/product-page/product-page.module.d.ts +2 -2
  23. package/app/components/product-price/product-price.component.d.ts +19 -19
  24. package/app/components/product-price/product-price.module.d.ts +2 -2
  25. package/app/components/product-properties/product-properties.component.d.ts +16 -16
  26. package/app/components/product-properties/product-properties.module.d.ts +2 -2
  27. package/app/components/product-related/product-related.component.d.ts +16 -16
  28. package/app/components/product-related/product-related.module.d.ts +2 -2
  29. package/app/components/product-selector-type/product-selector-type.component.d.ts +21 -21
  30. package/app/components/product-selector-type/product-selector-type.module.d.ts +2 -2
  31. package/app/components/product-stock/product-stock.component.d.ts +20 -20
  32. package/app/components/product-stock/product-stock.module.d.ts +2 -2
  33. package/app/components/product-symbols/product-symbols.component.d.ts +10 -10
  34. package/app/components/product-symbols/product-symbols.module.d.ts +2 -2
  35. package/app/enum/icon.enum.d.ts +17 -17
  36. package/app/enum/language-code.enum.d.ts +6 -6
  37. package/app/enum/selector-type.enum.d.ts +5 -5
  38. package/app/ione-product.component.d.ts +43 -43
  39. package/app/ione-product.module.d.ts +2 -2
  40. package/app/model/article-quantity.model.d.ts +5 -5
  41. package/app/model/icon.d.ts +4 -4
  42. package/app/model/productSettings.d.ts +30 -30
  43. package/app/model/render-modes.d.ts +5 -5
  44. package/app/model/render-parameters.d.ts +7 -7
  45. package/app/model/settings-options.d.ts +10 -10
  46. package/app/model/stock-and-delivery.d.ts +5 -5
  47. package/app/pipe/localize.pipe.d.ts +7 -7
  48. package/app/pipe/pipe.module.d.ts +2 -2
  49. package/app/product-version.d.ts +6 -6
  50. package/app/service/dictionary.service.d.ts +24 -24
  51. package/app/service/icon-cache.service.d.ts +17 -17
  52. package/app/service/product-connector-adapter.service.d.ts +34 -34
  53. package/app/service/product-connector.service.d.ts +38 -38
  54. package/app/service/product-event.service.d.ts +22 -22
  55. package/app/service/product-settings.service.d.ts +16 -16
  56. package/app/style/_scrollbars.mixins.scss +18 -18
  57. package/app/style/_variables.scss +21 -21
  58. package/app/utils/bit-utils.d.ts +7 -7
  59. package/app/utils/json-utils.service.d.ts +3 -3
  60. package/assets/dictionary/text.properties.d.ts +3 -3
  61. package/bundles/colijnit-product.umd.js +3108 -3108
  62. package/bundles/colijnit-product.umd.js.map +1 -1
  63. package/colijnit-product.d.ts +41 -41
  64. package/colijnit-product.metadata.json +1 -1
  65. package/esm2015/app/components/core/header/header.component.js +18 -18
  66. package/esm2015/app/components/core/header/header.module.js +19 -19
  67. package/esm2015/app/components/image-carousel/image-carousel.component.js +143 -143
  68. package/esm2015/app/components/image-carousel/image-carousel.module.js +23 -23
  69. package/esm2015/app/components/product-additional-description/product-additional-description.component.js +50 -50
  70. package/esm2015/app/components/product-additional-description/product-additional-description.module.js +21 -21
  71. package/esm2015/app/components/product-additional-info/product-additional-info.component.js +102 -102
  72. package/esm2015/app/components/product-additional-info/product-additional-info.module.js +21 -21
  73. package/esm2015/app/components/product-addtocart/product-addtocart.component.js +90 -90
  74. package/esm2015/app/components/product-addtocart/product-addtocart.module.js +24 -24
  75. package/esm2015/app/components/product-delivery/product-delivery.component.js +39 -39
  76. package/esm2015/app/components/product-delivery/product-delivery.module.js +23 -23
  77. package/esm2015/app/components/product-description/product-description.component.js +17 -17
  78. package/esm2015/app/components/product-description/product-description.module.js +19 -19
  79. package/esm2015/app/components/product-documents/product-document.module.js +25 -25
  80. package/esm2015/app/components/product-documents/product-documents.component.js +25 -25
  81. package/esm2015/app/components/product-external-source/product-external-source.component.js +110 -110
  82. package/esm2015/app/components/product-external-source/product-external-source.module.js +21 -21
  83. package/esm2015/app/components/product-info-tabs/product-info-tabs.component.js +59 -59
  84. package/esm2015/app/components/product-info-tabs/product-info-tabs.module.js +29 -29
  85. package/esm2015/app/components/product-page/product-page.component.js +215 -215
  86. package/esm2015/app/components/product-page/product-page.module.js +44 -44
  87. package/esm2015/app/components/product-price/product-price.component.js +60 -60
  88. package/esm2015/app/components/product-price/product-price.module.js +23 -23
  89. package/esm2015/app/components/product-properties/product-properties.component.js +50 -50
  90. package/esm2015/app/components/product-properties/product-properties.module.js +21 -21
  91. package/esm2015/app/components/product-related/product-related.component.js +62 -62
  92. package/esm2015/app/components/product-related/product-related.module.js +24 -24
  93. package/esm2015/app/components/product-selector-type/product-selector-type.component.js +42 -42
  94. package/esm2015/app/components/product-selector-type/product-selector-type.module.js +26 -26
  95. package/esm2015/app/components/product-stock/product-stock.component.js +59 -59
  96. package/esm2015/app/components/product-stock/product-stock.module.js +23 -23
  97. package/esm2015/app/components/product-symbols/product-symbols.component.js +34 -34
  98. package/esm2015/app/components/product-symbols/product-symbols.module.js +26 -26
  99. package/esm2015/app/enum/icon.enum.js +18 -18
  100. package/esm2015/app/enum/language-code.enum.js +8 -8
  101. package/esm2015/app/enum/selector-type.enum.js +7 -7
  102. package/esm2015/app/ione-product.component.js +114 -114
  103. package/esm2015/app/ione-product.module.js +29 -29
  104. package/esm2015/app/model/article-quantity.model.js +3 -3
  105. package/esm2015/app/model/icon.js +17 -17
  106. package/esm2015/app/model/productSettings.js +16 -16
  107. package/esm2015/app/model/render-modes.js +7 -7
  108. package/esm2015/app/model/render-parameters.js +10 -10
  109. package/esm2015/app/model/settings-options.js +13 -13
  110. package/esm2015/app/model/stock-and-delivery.js +8 -8
  111. package/esm2015/app/pipe/localize.pipe.js +27 -27
  112. package/esm2015/app/pipe/pipe.module.js +18 -18
  113. package/esm2015/app/product-version.js +10 -10
  114. package/esm2015/app/service/dictionary.service.js +94 -94
  115. package/esm2015/app/service/icon-cache.service.js +40 -40
  116. package/esm2015/app/service/product-connector-adapter.service.js +171 -171
  117. package/esm2015/app/service/product-connector.service.js +106 -106
  118. package/esm2015/app/service/product-event.service.js +29 -29
  119. package/esm2015/app/service/product-settings.service.js +86 -86
  120. package/esm2015/app/utils/bit-utils.js +18 -18
  121. package/esm2015/app/utils/json-utils.service.js +29 -29
  122. package/esm2015/assets/dictionary/text.properties.js +67 -67
  123. package/esm2015/colijnit-product.js +41 -41
  124. package/esm2015/public_api.js +10 -10
  125. package/fesm2015/colijnit-product.js +2212 -2212
  126. package/fesm2015/colijnit-product.js.map +1 -1
  127. package/package.json +5 -5
  128. package/public_api.d.ts +9 -9
@@ -1,171 +1,171 @@
1
- import { __awaiter } from "tslib";
2
- import { Injectable } from '@angular/core';
3
- import { Subject } from 'rxjs';
4
- import { ArticleFullObject } from '@colijnit/articleapi/build/model/article-full-object';
5
- import { SuperArticle } from '@colijnit/articleapi/build/model/super-article';
6
- import { Articles } from '@colijnit/articleapi/build/articles';
7
- import { DeliveryPrognosis } from '@colijnit/articleapi/build/model/delivery-prognosis';
8
- import { DocumentContent } from '@colijnit/articleapi/build/model/document-content';
9
- import { BusinessObjectFactory } from '@colijnit/ioneconnector/build/service/business-object-factory';
10
- import { Transaction } from '@colijnit/transactionapi/build/transaction';
11
- import { ProductSettings } from '../model/productSettings';
12
- import { MainApi } from '@colijnit/mainapi';
13
- import { TransactionInfoResponse } from '@colijnit/transactionapi/build/model/transaction-info-response.bo';
14
- import { ArticleExtended } from '@colijnit/articleapi/build/model/article-extended.bo';
15
- // Sole responsibility is simply to wrap around a colijn.Connector to create a stable inner interface to the library in a 1:1 method way.
16
- // Only to be used by the IOneControllerService.
17
- export class ProductConnectorAdapterService {
18
- constructor() {
19
- this.showLoader = new Subject();
20
- this._boFactory = new BusinessObjectFactory();
21
- }
22
- ngOnDestroy() {
23
- this.articleConnector.showLoader.unsubscribe();
24
- }
25
- initConnector(options) {
26
- return __awaiter(this, void 0, void 0, function* () {
27
- this.articleConnector = new Articles(options);
28
- yield this.articleConnector.connect();
29
- this.transactionConnector = new Transaction(options);
30
- this.articleConnector.showLoader.subscribe(value => this.showLoader.next(value));
31
- });
32
- }
33
- setInstance(instanceId) {
34
- // this.articleConnector.setInstanceToConfigure(instanceId, false);
35
- }
36
- getProductBundleSettings(url, upId) {
37
- return __awaiter(this, void 0, void 0, function* () {
38
- const tempSettings = new ProductSettings();
39
- tempSettings.url = url;
40
- tempSettings.schema = upId.toString();
41
- const tempMainConnector = new MainApi(tempSettings);
42
- const response = yield tempMainConnector.getPublicParams(upId);
43
- if (response) {
44
- return response.productSettings;
45
- }
46
- return "";
47
- });
48
- }
49
- convertArticleFullObjectToArticleExtended(article) {
50
- if (article) {
51
- return this._boFactory.makeWithRawBackendData(ArticleExtended, article);
52
- }
53
- }
54
- getDeliveryPrognosis(goodId, branchNr) {
55
- return __awaiter(this, void 0, void 0, function* () {
56
- const deliveryPrognosis = yield this.getSelectorDeliveryDate();
57
- if (!deliveryPrognosis || !deliveryPrognosis.returnValue) {
58
- return this.getDeliveryDate2(goodId);
59
- }
60
- return deliveryPrognosis;
61
- });
62
- }
63
- getSelectorDeliveryDate() {
64
- return __awaiter(this, void 0, void 0, function* () {
65
- const response = yield this.articleConnector.getSelectorDeliveryDate();
66
- if (response && response.validationResult && response.validationResult.success) {
67
- return this._boFactory.makeWithRawBackendData(DeliveryPrognosis, response.resultObject);
68
- }
69
- else {
70
- return null;
71
- }
72
- });
73
- }
74
- getArtStockStatus(goodId) {
75
- return __awaiter(this, void 0, void 0, function* () {
76
- const response = yield this.articleConnector.getArtStockStatus(goodId);
77
- if (response && response.validationResult && response.validationResult.success) {
78
- return response.resultObject;
79
- }
80
- else {
81
- return null;
82
- }
83
- });
84
- }
85
- getDeliveryDate2(goodId) {
86
- return __awaiter(this, void 0, void 0, function* () {
87
- const response = yield this.articleConnector.getDeliveryDate2(goodId);
88
- if (response && response.validationResult && response.validationResult.success) {
89
- return this._boFactory.makeWithRawBackendData(DeliveryPrognosis, response.resultObject);
90
- }
91
- else {
92
- return null;
93
- }
94
- });
95
- }
96
- getJsonConfiguredArticles(configuratorStatistics) {
97
- return __awaiter(this, void 0, void 0, function* () {
98
- const response = yield this.articleConnector.getJsonConfiguredArticles(configuratorStatistics);
99
- if (response && response.validationResult && response.validationResult.success) {
100
- return response.resultObject;
101
- }
102
- else {
103
- return '';
104
- }
105
- });
106
- }
107
- getJsonArticleFlatTree(goodId, goodType, quantity, showLoader = true, instanceId, configuratorStatistics) {
108
- return __awaiter(this, void 0, void 0, function* () {
109
- return this.articleConnector.getJsonArticleFlatTree(goodId, goodType, quantity, showLoader, instanceId, configuratorStatistics);
110
- });
111
- }
112
- getGoodIdFromArticleNr(sku) {
113
- return __awaiter(this, void 0, void 0, function* () {
114
- const response = yield this.articleConnector.getGoodIdFromArticleNr(sku);
115
- if (response && response.validationResult && response.validationResult.success) {
116
- return response.resultObject;
117
- }
118
- else {
119
- return null;
120
- }
121
- });
122
- }
123
- getArticleFullObject(goodId) {
124
- return __awaiter(this, void 0, void 0, function* () {
125
- const response = yield this.articleConnector.getArticleFullObject(goodId);
126
- if (response && response.validationResult && response.validationResult.success) {
127
- return this._boFactory.makeWithRawBackendData(ArticleFullObject, response.resultObject);
128
- }
129
- else {
130
- return null;
131
- }
132
- });
133
- }
134
- getSuperArticle(id, branch) {
135
- return __awaiter(this, void 0, void 0, function* () {
136
- const response = yield this.articleConnector.getSuperArticleQuickSel(id, branch);
137
- if (response && response.validationResult && response.validationResult.success) {
138
- return this._boFactory.makeWithRawBackendData(SuperArticle, response.resultObject);
139
- }
140
- else {
141
- return null;
142
- }
143
- });
144
- }
145
- getDocumentContent(docId, thumbnail = true) {
146
- return __awaiter(this, void 0, void 0, function* () {
147
- const response = yield this.articleConnector.getDocumentContent(docId, thumbnail);
148
- if (response && response.validationResult && response.validationResult.success) {
149
- return this._boFactory.makeWithRawBackendData(DocumentContent, response.resultObject);
150
- }
151
- else {
152
- return null;
153
- }
154
- });
155
- }
156
- addWebSessionTransactionLine(transactionUuid, sku, quantity) {
157
- return __awaiter(this, void 0, void 0, function* () {
158
- const response = yield this.transactionConnector.addWebSessionTransactionLine(transactionUuid, sku, quantity);
159
- if (response && response.validationResult && response.validationResult.success) {
160
- const infoResponse = this._boFactory.makeWithRawBackendData(TransactionInfoResponse, response.resultObject);
161
- return infoResponse.transactionInfo.uuid;
162
- }
163
- return "";
164
- });
165
- }
166
- }
167
- ProductConnectorAdapterService.decorators = [
168
- { type: Injectable }
169
- ];
170
- ProductConnectorAdapterService.ctorParameters = () => [];
171
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdC1jb25uZWN0b3ItYWRhcHRlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2FwcC9zZXJ2aWNlL3Byb2R1Y3QtY29ubmVjdG9yLWFkYXB0ZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFDLFVBQVUsRUFBWSxNQUFNLGVBQWUsQ0FBQztBQUNwRCxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQzdCLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLHNEQUFzRCxDQUFDO0FBQ3ZGLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxnREFBZ0QsQ0FBQztBQUU1RSxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0scUNBQXFDLENBQUM7QUFHN0QsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0scURBQXFELENBQUM7QUFDdEYsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG1EQUFtRCxDQUFDO0FBQ2xGLE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLCtEQUErRCxDQUFDO0FBQ3BHLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSw0Q0FBNEMsQ0FBQztBQUV2RSxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFDekQsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBQzFDLE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLG1FQUFtRSxDQUFDO0FBQzFHLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxzREFBc0QsQ0FBQztBQUdyRix5SUFBeUk7QUFDekksZ0RBQWdEO0FBRWhELE1BQU0sT0FBTyw4QkFBOEI7SUFTdkM7UUFQZ0IsZUFBVSxHQUFxQixJQUFJLE9BQU8sRUFBVyxDQUFDO1FBSzlELGVBQVUsR0FBMEIsSUFBSSxxQkFBcUIsRUFBRSxDQUFDO0lBR3hFLENBQUM7SUFFRCxXQUFXO1FBQ1AsSUFB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QUFJLENBQUMsVUFBVSxDQUFDLHNCQUFzQixDQUFDLGVBQWUsRUFBRSxRQUFRLENBQUMsWUFBWSxDQUErQixDQUFDO2FBQ3ZIO2lCQUFNO2dCQUNILE9BQU8sSUFBSSxDQUFDO2FBQ2Y7UUFDTCxDQUFDO0tBQUE7SUFFWSw0QkFBNEIsQ0FBQyxlQUF1QixFQUFFLEdBQVcsRUFBRSxRQUFnQjs7WUFDNUYsTUFBTSxRQUFRLEdBQTRCLE1BQU0sSUFBSSxDQUFDLG9CQUFvQixDQUFDLDRCQUE0QixDQUFDLGVBQWUsRUFBRSxHQUFHLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDdkksSUFBSSxRQUFRLElBQUksUUFBUSxDQUFDLGdCQUFnQixJQUFJLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUU7Z0JBQzVFLE1BQU0sWUFBWSxHQUE0QixJQUFJLENBQUMsVUFBVSxDQUFDLHNCQUFzQixDQUFDLHVCQUF1QixFQUFFLFFBQVEsQ0FBQyxZQUFZLENBQTRCLENBQUM7Z0JBQ2hLLE9BQU8sWUFBWSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUM7YUFDNUM7WUFDRCxPQUFPLEVBQUUsQ0FBQztRQUNkLENBQUM7S0FBQTs7O1lBaEpKLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGFibGUsIE9uRGVzdHJveX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7U3ViamVjdH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7QXJ0aWNsZUZ1bGxPYmplY3R9IGZyb20gJ0Bjb2xpam5pdC9hcnRpY2xlYXBpL2J1aWxkL21vZGVsL2FydGljbGUtZnVsbC1vYmplY3QnO1xyXG5pbXBvcnQge1N1cGVyQXJ0aWNsZX0gZnJvbSAnQGNvbGlqbml0L2FydGljbGVhcGkvYnVpbGQvbW9kZWwvc3VwZXItYXJ0aWNsZSc7XHJcbmltcG9ydCB7Q29uZmlndXJhdG9yU3RhdGlzdGljc0Vudmlyb25tZW50fSBmcm9tICdAY29saWpuaXQvYXJ0aWNsZWFwaS9idWlsZC9tb2RlbC9jb25maWd1cmF0b3Itc3RhdGlzdGljcy1lbnZpcm9ubWVudCc7XHJcbmltcG9ydCB7QXJ0aWNsZXN9IGZyb20gJ0Bjb2xpam5pdC9hcnRpY2xlYXBpL2J1aWxkL2FydGljbGVzJztcclxuaW1wb3J0IHtPcHRpb25zfSBmcm9tICdAY29saWpuaXQvaW9uZWNvbm5lY3Rvci9idWlsZC9tb2RlbC9vcHRpb25zJztcclxuaW1wb3J0IHtEYXRhU2VydmljZVJlc3BvbnNlRGF0YX0gZnJvbSAnQGNvbGlqbml0L2lvbmVjb25uZWN0b3IvYnVpbGQvbW9kZWwvZGF0YS1zZXJ2aWNlLXJlc3BvbnNlLWRhdGEnO1xyXG5pbXBvcnQge0RlbGl2ZXJ5UHJvZ25vc2lzfSBmcm9tICdAY29saWpuaXQvYXJ0aWNsZWFwaS9idWlsZC9tb2RlbC9kZWxpdmVyeS1wcm9nbm9zaXMnO1xyXG5pbXBvcnQge0RvY3VtZW50Q29udGVudH0gZnJvbSAnQGNvbGlqbml0L2FydGljbGVhcGkvYnVpbGQvbW9kZWwvZG9jdW1lbnQtY29udGVudCc7XHJcbmltcG9ydCB7QnVzaW5lc3NPYmplY3RGYWN0b3J5fSBmcm9tICdAY29saWpuaXQvaW9uZWNvbm5lY3Rvci9idWlsZC9zZXJ2aWNlL2J1c2luZXNzLW9iamVjdC1mYWN0b3J5JztcclxuaW1wb3J0IHtUcmFuc2FjdGlvbn0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL3RyYW5zYWN0aW9uJztcclxuaW1wb3J0IHtQcm9kdWN0U2V0dGluZ3NTZXJ2aWNlfSBmcm9tICcuL3Byb2R1Y3Qtc2V0dGluZ3Muc2VydmljZSc7XHJcbmltcG9ydCB7UHJvZHVjdFNldHRpbmdzfSBmcm9tICcuLi9tb2RlbC9wcm9kdWN0U2V0dGluZ3MnO1xyXG5pbXBvcnQge01haW5BcGl9IGZyb20gJ0Bjb2xpam5pdC9tYWluYXBpJztcclxuaW1wb3J0IHtUcmFuc2FjdGlvbkluZm9SZXNwb25zZX0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3RyYW5zYWN0aW9uLWluZm8tcmVzcG9uc2UuYm8nO1xyXG5pbXBvcnQge0FydGljbGVFeHRlbmRlZH0gZnJvbSAnQGNvbGlqbml0L2FydGljbGVhcGkvYnVpbGQvbW9kZWwvYXJ0aWNsZS1leHRlbmRlZC5ibyc7XHJcbmltcG9ydCB7QXJ0aWNsZUV4dGVuZGVkUmVxdWVzdH0gZnJvbSAnQGNvbGlqbml0L2FydGljbGVhcGkvYnVpbGQvbW9kZWwvYXJ0aWNsZS1leHRlbmRlZC1yZXF1ZXN0JztcclxuXHJcbi8vIFNvbGUgcmVzcG9uc2liaWxpdHkgaXMgc2ltcGx5IHRvIHdyYXAgYXJvdW5kIGEgY29saWpuLkNvbm5lY3RvciB0byBjcmVhdGUgYSBzdGFibGUgaW5uZXIgaW50ZXJmYWNlIHRvIHRoZSBsaWJyYXJ5IGluIGEgMToxIG1ldGhvZCB3YXkuXHJcbi8vIE9ubHkgdG8gYmUgdXNlZCBieSB0aGUgSU9uZUNvbnRyb2xsZXJTZXJ2aWNlLlxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBQcm9kdWN0Q29ubmVjdG9yQWRhcHRlclNlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xyXG5cclxuICAgIHB1YmxpYyByZWFkb25seSBzaG93TG9hZGVyOiBTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcclxuXHJcbiAgICBwdWJsaWMgYXJ0aWNsZUNvbm5lY3Rvcj86IEFydGljbGVzO1xyXG4gICAgcHVibGljIHRyYW5zYWN0aW9uQ29ubmVjdG9yOiBUcmFuc2FjdGlvbjtcclxuXHJcbiAgICBwcml2YXRlIF9ib0ZhY3Rvcnk6IEJ1c2luZXNzT2JqZWN0RmFjdG9yeSA9IG5ldyBCdXNpbmVzc09iamVjdEZhY3RvcnkoKTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmFydGljbGVDb25uZWN0b3Iuc2hvd0xvYWRlci51bnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhc3luYyBpbml0Q29ubmVjdG9yKG9wdGlvbnM6IE9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgICAgICB0aGlzLmFydGljbGVDb25uZWN0b3IgPSBuZXcgQXJ0aWNsZXMob3B0aW9ucyk7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5hcnRpY2xlQ29ubmVjdG9yLmNvbm5lY3QoKTtcclxuICAgICAgICB0aGlzLnRyYW5zYWN0aW9uQ29ubmVjdG9yID0gbmV3IFRyYW5zYWN0aW9uKG9wdGlvbnMpO1xyXG4gICAgICAgIHRoaXMuYXJ0aWNsZUNvbm5lY3Rvci5zaG93TG9hZGVyLnN1YnNjcmliZSh2YWx1ZSA9PiB0aGlzLnNob3dMb2FkZXIubmV4dCh2YWx1ZSkpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZXRJbnN0YW5jZShpbnN0YW5jZUlkOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgICAvLyB0aGlzLmFydGljbGVDb25uZWN0b3Iuc2V0SW5zdGFuY2VUb0NvbmZpZ3VyZShpbnN0YW5jZUlkLCBmYWxzZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFzeW5jIGdldFByb2R1Y3RCdW5kbGVTZXR0aW5ncyh1cmw6IHN0cmluZywgdXBJZDogbnVtYmVyKTogUHJvbWlzZTxzdHJpbmc+IHtcclxuICAgICAgICBjb25zdCB0ZW1wU2V0dGluZ3M6IFByb2R1Y3RTZXR0aW5ncyA9IG5ldyBQcm9kdWN0U2V0dGluZ3MoKTtcclxuICAgICAgICB0ZW1wU2V0dGluZ3MudXJsID0gdXJsO1xyXG4gICAgICAgIHRlbXBTZXR0aW5ncy5zY2hlbWEgPSB1cElkLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgY29uc3QgdGVtcE1haW5Db25uZWN0b3IgPSBuZXcgTWFpbkFwaSh0ZW1wU2V0dGluZ3MpO1xyXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlOiBhbnkgPSBhd2FpdCB0ZW1wTWFpbkNvbm5lY3Rvci5nZXRQdWJsaWNQYXJhbXModXBJZCk7XHJcbiAgICAgICAgaWYgKHJlc3BvbnNlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiByZXNwb25zZS5wcm9kdWN0U2V0dGluZ3M7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBcIlwiO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjb252ZXJ0QXJ0aWNsZUZ1bGxPYmplY3RUb0FydGljbGVFeHRlbmRlZChhcnRpY2xlOiBBcnRpY2xlRnVsbE9iamVjdCk6IEFydGljbGVFeHRlbmRlZCB7XHJcbiAgICAgICAgaWYgKGFydGljbGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2JvRmFjdG9yeS5tYWtlV2l0aFJhd0JhY2tlbmREYXRhKEFydGljbGVFeHRlbmRlZCwgYXJ0aWNsZSkgYXMgQXJ0aWNsZUV4dGVuZGVkO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXN5bmMgZ2V0RGVsaXZlcnlQcm9nbm9zaXMoZ29vZElkOiBudW1iZXIsIGJyYW5jaE5yPzogc3RyaW5nKTogUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICBjb25zdCBkZWxpdmVyeVByb2dub3NpczogRGVsaXZlcnlQcm9nbm9zaXMgPSBhd2FpdCB0aGlzLmdldFNlbGVjdG9yRGVsaXZlcnlEYXRlKCk7XHJcbiAgICAgICAgaWYgKCFkZWxpdmVyeVByb2dub3NpcyB8fCAhZGVsaXZlcnlQcm9nbm9zaXMucmV0dXJuVmFsdWUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RGVsaXZlcnlEYXRlMihnb29kSWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZGVsaXZlcnlQcm9nbm9zaXM7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFzeW5jIGdldFNlbGVjdG9yRGVsaXZlcnlEYXRlKCk6IFByb21pc2U8RGVsaXZlcnlQcm9nbm9zaXM+IHtcclxuICAgICAgICBjb25zdCByZXNwb25zZTogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmFydGljbGVDb25uZWN0b3IuZ2V0U2VsZWN0b3JEZWxpdmVyeURhdGUoKTtcclxuICAgICAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdCAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2JvRmFjdG9yeS5tYWtlV2l0aFJhd0JhY2tlbmREYXRhKERlbGl2ZXJ5UHJvZ25vc2lzLCByZXNwb25zZS5yZXN1bHRPYmplY3QpIGFzIHVua25vd24gYXMgRGVsaXZlcnlQcm9nbm9zaXM7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhc3luYyBnZXRBcnRTdG9ja1N0YXR1cyhnb29kSWQ6IG51bWJlcik6IFByb21pc2U8bnVtYmVyPiB7XHJcbiAgICAgICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5hcnRpY2xlQ29ubmVjdG9yLmdldEFydFN0b2NrU3RhdHVzKGdvb2RJZCk7XHJcbiAgICAgICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIHJldHVybiByZXNwb25zZS5yZXN1bHRPYmplY3Q7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhc3luYyBnZXREZWxpdmVyeURhdGUyKGdvb2RJZDogbnVtYmVyKTogUHJvbWlzZTxEZWxpdmVyeVByb2dub3Npcz4ge1xyXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlOiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuYXJ0aWNsZUNvbm5lY3Rvci5nZXREZWxpdmVyeURhdGUyKGdvb2RJZCk7XHJcbiAgICAgICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9ib0ZhY3RvcnkubWFrZVdpdGhSYXdCYWNrZW5kRGF0YShEZWxpdmVyeVByb2dub3NpcywgcmVzcG9uc2UucmVzdWx0T2JqZWN0KSBhcyB1bmtub3duIGFzIERlbGl2ZXJ5UHJvZ25vc2lzO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXN5bmMgZ2V0SnNvbkNvbmZpZ3VyZWRBcnRpY2xlcyhjb25maWd1cmF0b3JTdGF0aXN0aWNzPzogQ29uZmlndXJhdG9yU3RhdGlzdGljc0Vudmlyb25tZW50KTogUHJvbWlzZTxzdHJpbmc+IHtcclxuICAgICAgICBjb25zdCByZXNwb25zZTogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmFydGljbGVDb25uZWN0b3IuZ2V0SnNvbkNvbmZpZ3VyZWRBcnRpY2xlcyhjb25maWd1cmF0b3JTdGF0aXN0aWNzKTtcclxuICAgICAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdCAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlLnJlc3VsdE9iamVjdDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gJyc7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhc3luYyBnZXRKc29uQXJ0aWNsZUZsYXRUcmVlKFxyXG4gICAgICAgIGdvb2RJZDogbnVtYmVyLFxyXG4gICAgICAgIGdvb2RUeXBlOiBzdHJpbmcsXHJcbiAgICAgICAgcXVhbnRpdHk6IG51bWJlcixcclxuICAgICAgICBzaG93TG9hZGVyOiBib29sZWFuID0gdHJ1ZSxcclxuICAgICAgICBpbnN0YW5jZUlkPzogYW55LFxyXG4gICAgICAgIGNvbmZpZ3VyYXRvclN0YXRpc3RpY3M/OiBDb25maWd1cmF0b3JTdGF0aXN0aWNzRW52aXJvbm1lbnRcclxuICAgICk6IFByb21pc2U8c3RyaW5nPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYXJ0aWNsZUNvbm5lY3Rvci5nZXRKc29uQXJ0aWNsZUZsYXRUcmVlKGdvb2RJZCwgZ29vZFR5cGUsIHF1YW50aXR5LCBzaG93TG9hZGVyLCBpbnN0YW5jZUlkLCBjb25maWd1cmF0b3JTdGF0aXN0aWNzKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXN5bmMgZ2V0R29vZElkRnJvbUFydGljbGVOcihza3U6IHN0cmluZyk6IFByb21pc2U8bnVtYmVyPiB7XHJcbiAgICAgICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5hcnRpY2xlQ29ubmVjdG9yLmdldEdvb2RJZEZyb21BcnRpY2xlTnIoc2t1KTtcclxuICAgICAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdCAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlLnJlc3VsdE9iamVjdDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFzeW5jIGdldEFydGljbGVGdWxsT2JqZWN0KGdvb2RJZDogbnVtYmVyKTogUHJvbWlzZTxBcnRpY2xlRnVsbE9iamVjdD4ge1xyXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlOiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuYXJ0aWNsZUNvbm5lY3Rvci5nZXRBcnRpY2xlRnVsbE9iamVjdChnb29kSWQpO1xyXG4gICAgICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fYm9GYWN0b3J5Lm1ha2VXaXRoUmF3QmFja2VuZERhdGEoQXJ0aWNsZUZ1bGxPYmplY3QsIHJlc3BvbnNlLnJlc3VsdE9iamVjdCkgYXMgQXJ0aWNsZUZ1bGxPYmplY3Q7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhc3luYyBnZXRTdXBlckFydGljbGUoaWQ6IHN0cmluZywgYnJhbmNoPzogc3RyaW5nKTogUHJvbWlzZTxTdXBlckFydGljbGU+IHtcclxuICAgICAgICBjb25zdCByZXNwb25zZTogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmFydGljbGVDb25uZWN0b3IuZ2V0U3VwZXJBcnRpY2xlUXVpY2tTZWwoaWQsIGJyYW5jaCk7XHJcbiAgICAgICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9ib0ZhY3RvcnkubWFrZVdpdGhSYXdCYWNrZW5kRGF0YShTdXBlckFydGljbGUsIHJlc3BvbnNlLnJlc3VsdE9iamVjdCkgYXMgU3VwZXJBcnRpY2xlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXN5bmMgZ2V0RG9jdW1lbnRDb250ZW50KGRvY0lkOiBudW1iZXIsIHRodW1ibmFpbDogYm9vbGVhbiA9IHRydWUpOiBQcm9taXNlPERvY3VtZW50Q29udGVudD4ge1xyXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlOiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuYXJ0aWNsZUNvbm5lY3Rvci5nZXREb2N1bWVudENvbnRlbnQoZG9jSWQsIHRodW1ibmFpbCk7XHJcbiAgICAgICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9ib0ZhY3RvcnkubWFrZVdpdGhSYXdCYWNrZW5kRGF0YShEb2N1bWVudENvbnRlbnQsIHJlc3BvbnNlLnJlc3VsdE9iamVjdCkgYXMgdW5rbm93biBhcyBEb2N1bWVudENvbnRlbnQ7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhc3luYyBhZGRXZWJTZXNzaW9uVHJhbnNhY3Rpb25MaW5lKHRyYW5zYWN0aW9uVXVpZDogc3RyaW5nLCBza3U6IHN0cmluZywgcXVhbnRpdHk6IG51bWJlcik6IFByb21pc2U8c3RyaW5nPiB7XHJcbiAgICAgICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy50cmFuc2FjdGlvbkNvbm5lY3Rvci5hZGRXZWJTZXNzaW9uVHJhbnNhY3Rpb25MaW5lKHRyYW5zYWN0aW9uVXVpZCwgc2t1LCBxdWFudGl0eSk7XHJcbiAgICAgICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGluZm9SZXNwb25zZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UgPSB0aGlzLl9ib0ZhY3RvcnkubWFrZVdpdGhSYXdCYWNrZW5kRGF0YShUcmFuc2FjdGlvbkluZm9SZXNwb25zZSwgcmVzcG9uc2UucmVzdWx0T2JqZWN0KSBhcyBUcmFuc2FjdGlvbkluZm9SZXNwb25zZTtcclxuICAgICAgICAgICAgcmV0dXJuIGluZm9SZXNwb25zZS50cmFuc2FjdGlvbkluZm8udXVpZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIFwiXCI7XHJcbiAgICB9XHJcbn1cclxuIl19
1
+ import { __awaiter } from "tslib";
2
+ import { Injectable } from '@angular/core';
3
+ import { Subject } from 'rxjs';
4
+ import { ArticleFullObject } from '@colijnit/articleapi/build/model/article-full-object';
5
+ import { SuperArticle } from '@colijnit/articleapi/build/model/super-article';
6
+ import { Articles } from '@colijnit/articleapi/build/articles';
7
+ import { DeliveryPrognosis } from '@colijnit/articleapi/build/model/delivery-prognosis';
8
+ import { DocumentContent } from '@colijnit/articleapi/build/model/document-content';
9
+ import { BusinessObjectFactory } from '@colijnit/ioneconnector/build/service/business-object-factory';
10
+ import { Transaction } from '@colijnit/transactionapi/build/transaction';
11
+ import { ProductSettings } from '../model/productSettings';
12
+ import { MainApi } from '@colijnit/mainapi';
13
+ import { TransactionInfoResponse } from '@colijnit/transactionapi/build/model/transaction-info-response.bo';
14
+ import { ArticleExtended } from '@colijnit/articleapi/build/model/article-extended.bo';
15
+ // Sole responsibility is simply to wrap around a colijn.Connector to create a stable inner interface to the library in a 1:1 method way.
16
+ // Only to be used by the IOneControllerService.
17
+ export class ProductConnectorAdapterService {
18
+ constructor() {
19
+ this.showLoader = new Subject();
20
+ this._boFactory = new BusinessObjectFactory();
21
+ }
22
+ ngOnDestroy() {
23
+ this.articleConnector.showLoader.unsubscribe();
24
+ }
25
+ initConnector(options) {
26
+ return __awaiter(this, void 0, void 0, function* () {
27
+ this.articleConnector = new Articles(options);
28
+ yield this.articleConnector.connect();
29
+ this.transactionConnector = new Transaction(options);
30
+ this.articleConnector.showLoader.subscribe(value => this.showLoader.next(value));
31
+ });
32
+ }
33
+ setInstance(instanceId) {
34
+ // this.articleConnector.setInstanceToConfigure(instanceId, false);
35
+ }
36
+ getProductBundleSettings(url, upId) {
37
+ return __awaiter(this, void 0, void 0, function* () {
38
+ const tempSettings = new ProductSettings();
39
+ tempSettings.url = url;
40
+ tempSettings.schema = upId.toString();
41
+ const tempMainConnector = new MainApi(tempSettings);
42
+ const response = yield tempMainConnector.getPublicParams(upId);
43
+ if (response) {
44
+ return response.productSettings;
45
+ }
46
+ return "";
47
+ });
48
+ }
49
+ convertArticleFullObjectToArticleExtended(article) {
50
+ if (article) {
51
+ return this._boFactory.makeWithRawBackendData(ArticleExtended, article);
52
+ }
53
+ }
54
+ getDeliveryPrognosis(goodId, branchNr) {
55
+ return __awaiter(this, void 0, void 0, function* () {
56
+ const deliveryPrognosis = yield this.getSelectorDeliveryDate();
57
+ if (!deliveryPrognosis || !deliveryPrognosis.returnValue) {
58
+ return this.getDeliveryDate2(goodId);
59
+ }
60
+ return deliveryPrognosis;
61
+ });
62
+ }
63
+ getSelectorDeliveryDate() {
64
+ return __awaiter(this, void 0, void 0, function* () {
65
+ const response = yield this.articleConnector.getSelectorDeliveryDate();
66
+ if (response && response.validationResult && response.validationResult.success) {
67
+ return this._boFactory.makeWithRawBackendData(DeliveryPrognosis, response.resultObject);
68
+ }
69
+ else {
70
+ return null;
71
+ }
72
+ });
73
+ }
74
+ getArtStockStatus(goodId) {
75
+ return __awaiter(this, void 0, void 0, function* () {
76
+ const response = yield this.articleConnector.getArtStockStatus(goodId);
77
+ if (response && response.validationResult && response.validationResult.success) {
78
+ return response.resultObject;
79
+ }
80
+ else {
81
+ return null;
82
+ }
83
+ });
84
+ }
85
+ getDeliveryDate2(goodId) {
86
+ return __awaiter(this, void 0, void 0, function* () {
87
+ const response = yield this.articleConnector.getDeliveryDate2(goodId);
88
+ if (response && response.validationResult && response.validationResult.success) {
89
+ return this._boFactory.makeWithRawBackendData(DeliveryPrognosis, response.resultObject);
90
+ }
91
+ else {
92
+ return null;
93
+ }
94
+ });
95
+ }
96
+ getJsonConfiguredArticles(configuratorStatistics) {
97
+ return __awaiter(this, void 0, void 0, function* () {
98
+ const response = yield this.articleConnector.getJsonConfiguredArticles(configuratorStatistics);
99
+ if (response && response.validationResult && response.validationResult.success) {
100
+ return response.resultObject;
101
+ }
102
+ else {
103
+ return '';
104
+ }
105
+ });
106
+ }
107
+ getJsonArticleFlatTree(goodId, goodType, quantity, showLoader = true, instanceId, configuratorStatistics) {
108
+ return __awaiter(this, void 0, void 0, function* () {
109
+ return this.articleConnector.getJsonArticleFlatTree(goodId, goodType, quantity, showLoader, instanceId, configuratorStatistics);
110
+ });
111
+ }
112
+ getGoodIdFromArticleNr(sku) {
113
+ return __awaiter(this, void 0, void 0, function* () {
114
+ const response = yield this.articleConnector.getGoodIdFromArticleNr(sku);
115
+ if (response && response.validationResult && response.validationResult.success) {
116
+ return response.resultObject;
117
+ }
118
+ else {
119
+ return null;
120
+ }
121
+ });
122
+ }
123
+ getArticleFullObject(goodId) {
124
+ return __awaiter(this, void 0, void 0, function* () {
125
+ const response = yield this.articleConnector.getArticleFullObject(goodId);
126
+ if (response && response.validationResult && response.validationResult.success) {
127
+ return this._boFactory.makeWithRawBackendData(ArticleFullObject, response.resultObject);
128
+ }
129
+ else {
130
+ return null;
131
+ }
132
+ });
133
+ }
134
+ getSuperArticle(id, branch) {
135
+ return __awaiter(this, void 0, void 0, function* () {
136
+ const response = yield this.articleConnector.getSuperArticleQuickSel(id, branch);
137
+ if (response && response.validationResult && response.validationResult.success) {
138
+ return this._boFactory.makeWithRawBackendData(SuperArticle, response.resultObject);
139
+ }
140
+ else {
141
+ return null;
142
+ }
143
+ });
144
+ }
145
+ getDocumentContent(docId, thumbnail = true) {
146
+ return __awaiter(this, void 0, void 0, function* () {
147
+ const response = yield this.articleConnector.getDocumentContent(docId, thumbnail);
148
+ if (response && response.validationResult && response.validationResult.success) {
149
+ return this._boFactory.makeWithRawBackendData(DocumentContent, response.resultObject);
150
+ }
151
+ else {
152
+ return null;
153
+ }
154
+ });
155
+ }
156
+ addWebSessionTransactionLine(transactionUuid, sku, quantity) {
157
+ return __awaiter(this, void 0, void 0, function* () {
158
+ const response = yield this.transactionConnector.addWebSessionTransactionLine(transactionUuid, sku, quantity);
159
+ if (response && response.validationResult && response.validationResult.success) {
160
+ const infoResponse = this._boFactory.makeWithRawBackendData(TransactionInfoResponse, response.resultObject);
161
+ return infoResponse.transactionInfo.uuid;
162
+ }
163
+ return "";
164
+ });
165
+ }
166
+ }
167
+ ProductConnectorAdapterService.decorators = [
168
+ { type: Injectable }
169
+ ];
170
+ ProductConnectorAdapterService.ctorParameters = () => [];
171
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdC1jb25uZWN0b3ItYWRhcHRlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2FwcC9zZXJ2aWNlL3Byb2R1Y3QtY29ubmVjdG9yLWFkYXB0ZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFDLFVBQVUsRUFBWSxNQUFNLGVBQWUsQ0FBQztBQUNwRCxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQzdCLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLHNEQUFzRCxDQUFDO0FBQ3ZGLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxnREFBZ0QsQ0FBQztBQUU1RSxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0scUNBQXFDLENBQUM7QUFHN0QsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0scURBQXFELENBQUM7QUFDdEYsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG1EQUFtRCxDQUFDO0FBQ2xGLE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLCtEQUErRCxDQUFDO0FBQ3BHLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSw0Q0FBNEMsQ0FBQztBQUV2RSxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFDekQsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBQzFDLE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLG1FQUFtRSxDQUFDO0FBQzFHLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxzREFBc0QsQ0FBQztBQUdyRix5SUFBeUk7QUFDekksZ0RBQWdEO0FBRWhELE1BQU0sT0FBTyw4QkFBOEI7SUFTdkM7UUFQZ0IsZUFBVSxHQUFxQixJQUFJLE9BQU8sRUFBVyxDQUFDO1FBSzlELGVBQVUsR0FBMEIsSUFBSSxxQkFBcUIsRUFBRSxDQUFDO0lBR3hFLENBQUM7SUFFRCxXQUFXO1FBQ1AsSUFB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QUFJLENBQUMsVUFBVSxDQUFDLHNCQUFzQixDQUFDLGVBQWUsRUFBRSxRQUFRLENBQUMsWUFBWSxDQUErQixDQUFDO2FBQ3ZIO2lCQUFNO2dCQUNILE9BQU8sSUFBSSxDQUFDO2FBQ2Y7UUFDTCxDQUFDO0tBQUE7SUFFWSw0QkFBNEIsQ0FBQyxlQUF1QixFQUFFLEdBQVcsRUFBRSxRQUFnQjs7WUFDNUYsTUFBTSxRQUFRLEdBQTRCLE1BQU0sSUFBSSxDQUFDLG9CQUFvQixDQUFDLDRCQUE0QixDQUFDLGVBQWUsRUFBRSxHQUFHLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDdkksSUFBSSxRQUFRLElBQUksUUFBUSxDQUFDLGdCQUFnQixJQUFJLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUU7Z0JBQzVFLE1BQU0sWUFBWSxHQUE0QixJQUFJLENBQUMsVUFBVSxDQUFDLHNCQUFzQixDQUFDLHVCQUF1QixFQUFFLFFBQVEsQ0FBQyxZQUFZLENBQTRCLENBQUM7Z0JBQ2hLLE9BQU8sWUFBWSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUM7YUFDNUM7WUFDRCxPQUFPLEVBQUUsQ0FBQztRQUNkLENBQUM7S0FBQTs7O1lBaEpKLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGFibGUsIE9uRGVzdHJveX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1N1YmplY3R9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtBcnRpY2xlRnVsbE9iamVjdH0gZnJvbSAnQGNvbGlqbml0L2FydGljbGVhcGkvYnVpbGQvbW9kZWwvYXJ0aWNsZS1mdWxsLW9iamVjdCc7XG5pbXBvcnQge1N1cGVyQXJ0aWNsZX0gZnJvbSAnQGNvbGlqbml0L2FydGljbGVhcGkvYnVpbGQvbW9kZWwvc3VwZXItYXJ0aWNsZSc7XG5pbXBvcnQge0NvbmZpZ3VyYXRvclN0YXRpc3RpY3NFbnZpcm9ubWVudH0gZnJvbSAnQGNvbGlqbml0L2FydGljbGVhcGkvYnVpbGQvbW9kZWwvY29uZmlndXJhdG9yLXN0YXRpc3RpY3MtZW52aXJvbm1lbnQnO1xuaW1wb3J0IHtBcnRpY2xlc30gZnJvbSAnQGNvbGlqbml0L2FydGljbGVhcGkvYnVpbGQvYXJ0aWNsZXMnO1xuaW1wb3J0IHtPcHRpb25zfSBmcm9tICdAY29saWpuaXQvaW9uZWNvbm5lY3Rvci9idWlsZC9tb2RlbC9vcHRpb25zJztcbmltcG9ydCB7RGF0YVNlcnZpY2VSZXNwb25zZURhdGF9IGZyb20gJ0Bjb2xpam5pdC9pb25lY29ubmVjdG9yL2J1aWxkL21vZGVsL2RhdGEtc2VydmljZS1yZXNwb25zZS1kYXRhJztcbmltcG9ydCB7RGVsaXZlcnlQcm9nbm9zaXN9IGZyb20gJ0Bjb2xpam5pdC9hcnRpY2xlYXBpL2J1aWxkL21vZGVsL2RlbGl2ZXJ5LXByb2dub3Npcyc7XG5pbXBvcnQge0RvY3VtZW50Q29udGVudH0gZnJvbSAnQGNvbGlqbml0L2FydGljbGVhcGkvYnVpbGQvbW9kZWwvZG9jdW1lbnQtY29udGVudCc7XG5pbXBvcnQge0J1c2luZXNzT2JqZWN0RmFjdG9yeX0gZnJvbSAnQGNvbGlqbml0L2lvbmVjb25uZWN0b3IvYnVpbGQvc2VydmljZS9idXNpbmVzcy1vYmplY3QtZmFjdG9yeSc7XG5pbXBvcnQge1RyYW5zYWN0aW9ufSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvdHJhbnNhY3Rpb24nO1xuaW1wb3J0IHtQcm9kdWN0U2V0dGluZ3NTZXJ2aWNlfSBmcm9tICcuL3Byb2R1Y3Qtc2V0dGluZ3Muc2VydmljZSc7XG5pbXBvcnQge1Byb2R1Y3RTZXR0aW5nc30gZnJvbSAnLi4vbW9kZWwvcHJvZHVjdFNldHRpbmdzJztcbmltcG9ydCB7TWFpbkFwaX0gZnJvbSAnQGNvbGlqbml0L21haW5hcGknO1xuaW1wb3J0IHtUcmFuc2FjdGlvbkluZm9SZXNwb25zZX0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3RyYW5zYWN0aW9uLWluZm8tcmVzcG9uc2UuYm8nO1xuaW1wb3J0IHtBcnRpY2xlRXh0ZW5kZWR9IGZyb20gJ0Bjb2xpam5pdC9hcnRpY2xlYXBpL2J1aWxkL21vZGVsL2FydGljbGUtZXh0ZW5kZWQuYm8nO1xuaW1wb3J0IHtBcnRpY2xlRXh0ZW5kZWRSZXF1ZXN0fSBmcm9tICdAY29saWpuaXQvYXJ0aWNsZWFwaS9idWlsZC9tb2RlbC9hcnRpY2xlLWV4dGVuZGVkLXJlcXVlc3QnO1xuXG4vLyBTb2xlIHJlc3BvbnNpYmlsaXR5IGlzIHNpbXBseSB0byB3cmFwIGFyb3VuZCBhIGNvbGlqbi5Db25uZWN0b3IgdG8gY3JlYXRlIGEgc3RhYmxlIGlubmVyIGludGVyZmFjZSB0byB0aGUgbGlicmFyeSBpbiBhIDE6MSBtZXRob2Qgd2F5LlxuLy8gT25seSB0byBiZSB1c2VkIGJ5IHRoZSBJT25lQ29udHJvbGxlclNlcnZpY2UuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgUHJvZHVjdENvbm5lY3RvckFkYXB0ZXJTZXJ2aWNlIGltcGxlbWVudHMgT25EZXN0cm95IHtcblxuICAgIHB1YmxpYyByZWFkb25seSBzaG93TG9hZGVyOiBTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcblxuICAgIHB1YmxpYyBhcnRpY2xlQ29ubmVjdG9yPzogQXJ0aWNsZXM7XG4gICAgcHVibGljIHRyYW5zYWN0aW9uQ29ubmVjdG9yOiBUcmFuc2FjdGlvbjtcblxuICAgIHByaXZhdGUgX2JvRmFjdG9yeTogQnVzaW5lc3NPYmplY3RGYWN0b3J5ID0gbmV3IEJ1c2luZXNzT2JqZWN0RmFjdG9yeSgpO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuYXJ0aWNsZUNvbm5lY3Rvci5zaG93TG9hZGVyLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGluaXRDb25uZWN0b3Iob3B0aW9uczogT3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aGlzLmFydGljbGVDb25uZWN0b3IgPSBuZXcgQXJ0aWNsZXMob3B0aW9ucyk7XG4gICAgICAgIGF3YWl0IHRoaXMuYXJ0aWNsZUNvbm5lY3Rvci5jb25uZWN0KCk7XG4gICAgICAgIHRoaXMudHJhbnNhY3Rpb25Db25uZWN0b3IgPSBuZXcgVHJhbnNhY3Rpb24ob3B0aW9ucyk7XG4gICAgICAgIHRoaXMuYXJ0aWNsZUNvbm5lY3Rvci5zaG93TG9hZGVyLnN1YnNjcmliZSh2YWx1ZSA9PiB0aGlzLnNob3dMb2FkZXIubmV4dCh2YWx1ZSkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRJbnN0YW5jZShpbnN0YW5jZUlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgLy8gdGhpcy5hcnRpY2xlQ29ubmVjdG9yLnNldEluc3RhbmNlVG9Db25maWd1cmUoaW5zdGFuY2VJZCwgZmFsc2UpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRQcm9kdWN0QnVuZGxlU2V0dGluZ3ModXJsOiBzdHJpbmcsIHVwSWQ6IG51bWJlcik6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgICAgIGNvbnN0IHRlbXBTZXR0aW5nczogUHJvZHVjdFNldHRpbmdzID0gbmV3IFByb2R1Y3RTZXR0aW5ncygpO1xuICAgICAgICB0ZW1wU2V0dGluZ3MudXJsID0gdXJsO1xuICAgICAgICB0ZW1wU2V0dGluZ3Muc2NoZW1hID0gdXBJZC50b1N0cmluZygpO1xuICAgICAgICBjb25zdCB0ZW1wTWFpbkNvbm5lY3RvciA9IG5ldyBNYWluQXBpKHRlbXBTZXR0aW5ncyk7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlOiBhbnkgPSBhd2FpdCB0ZW1wTWFpbkNvbm5lY3Rvci5nZXRQdWJsaWNQYXJhbXModXBJZCk7XG4gICAgICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlLnByb2R1Y3RTZXR0aW5ncztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG5cbiAgICBwdWJsaWMgY29udmVydEFydGljbGVGdWxsT2JqZWN0VG9BcnRpY2xlRXh0ZW5kZWQoYXJ0aWNsZTogQXJ0aWNsZUZ1bGxPYmplY3QpOiBBcnRpY2xlRXh0ZW5kZWQge1xuICAgICAgICBpZiAoYXJ0aWNsZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2JvRmFjdG9yeS5tYWtlV2l0aFJhd0JhY2tlbmREYXRhKEFydGljbGVFeHRlbmRlZCwgYXJ0aWNsZSkgYXMgQXJ0aWNsZUV4dGVuZGVkO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldERlbGl2ZXJ5UHJvZ25vc2lzKGdvb2RJZDogbnVtYmVyLCBicmFuY2hOcj86IHN0cmluZyk6IFByb21pc2U8YW55PiB7XG4gICAgICAgIGNvbnN0IGRlbGl2ZXJ5UHJvZ25vc2lzOiBEZWxpdmVyeVByb2dub3NpcyA9IGF3YWl0IHRoaXMuZ2V0U2VsZWN0b3JEZWxpdmVyeURhdGUoKTtcbiAgICAgICAgaWYgKCFkZWxpdmVyeVByb2dub3NpcyB8fCAhZGVsaXZlcnlQcm9nbm9zaXMucmV0dXJuVmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldERlbGl2ZXJ5RGF0ZTIoZ29vZElkKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGVsaXZlcnlQcm9nbm9zaXM7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldFNlbGVjdG9yRGVsaXZlcnlEYXRlKCk6IFByb21pc2U8RGVsaXZlcnlQcm9nbm9zaXM+IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5hcnRpY2xlQ29ubmVjdG9yLmdldFNlbGVjdG9yRGVsaXZlcnlEYXRlKCk7XG4gICAgICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2JvRmFjdG9yeS5tYWtlV2l0aFJhd0JhY2tlbmREYXRhKERlbGl2ZXJ5UHJvZ25vc2lzLCByZXNwb25zZS5yZXN1bHRPYmplY3QpIGFzIHVua25vd24gYXMgRGVsaXZlcnlQcm9nbm9zaXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRBcnRTdG9ja1N0YXR1cyhnb29kSWQ6IG51bWJlcik6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlOiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuYXJ0aWNsZUNvbm5lY3Rvci5nZXRBcnRTdG9ja1N0YXR1cyhnb29kSWQpO1xuICAgICAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdCAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICAgICAgICAgIHJldHVybiByZXNwb25zZS5yZXN1bHRPYmplY3Q7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXREZWxpdmVyeURhdGUyKGdvb2RJZDogbnVtYmVyKTogUHJvbWlzZTxEZWxpdmVyeVByb2dub3Npcz4ge1xuICAgICAgICBjb25zdCByZXNwb25zZTogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmFydGljbGVDb25uZWN0b3IuZ2V0RGVsaXZlcnlEYXRlMihnb29kSWQpO1xuICAgICAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdCAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9ib0ZhY3RvcnkubWFrZVdpdGhSYXdCYWNrZW5kRGF0YShEZWxpdmVyeVByb2dub3NpcywgcmVzcG9uc2UucmVzdWx0T2JqZWN0KSBhcyB1bmtub3duIGFzIERlbGl2ZXJ5UHJvZ25vc2lzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0SnNvbkNvbmZpZ3VyZWRBcnRpY2xlcyhjb25maWd1cmF0b3JTdGF0aXN0aWNzPzogQ29uZmlndXJhdG9yU3RhdGlzdGljc0Vudmlyb25tZW50KTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5hcnRpY2xlQ29ubmVjdG9yLmdldEpzb25Db25maWd1cmVkQXJ0aWNsZXMoY29uZmlndXJhdG9yU3RhdGlzdGljcyk7XG4gICAgICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xuICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlLnJlc3VsdE9iamVjdDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRKc29uQXJ0aWNsZUZsYXRUcmVlKFxuICAgICAgICBnb29kSWQ6IG51bWJlcixcbiAgICAgICAgZ29vZFR5cGU6IHN0cmluZyxcbiAgICAgICAgcXVhbnRpdHk6IG51bWJlcixcbiAgICAgICAgc2hvd0xvYWRlcjogYm9vbGVhbiA9IHRydWUsXG4gICAgICAgIGluc3RhbmNlSWQ/OiBhbnksXG4gICAgICAgIGNvbmZpZ3VyYXRvclN0YXRpc3RpY3M/OiBDb25maWd1cmF0b3JTdGF0aXN0aWNzRW52aXJvbm1lbnRcbiAgICApOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICByZXR1cm4gdGhpcy5hcnRpY2xlQ29ubmVjdG9yLmdldEpzb25BcnRpY2xlRmxhdFRyZWUoZ29vZElkLCBnb29kVHlwZSwgcXVhbnRpdHksIHNob3dMb2FkZXIsIGluc3RhbmNlSWQsIGNvbmZpZ3VyYXRvclN0YXRpc3RpY3MpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRHb29kSWRGcm9tQXJ0aWNsZU5yKHNrdTogc3RyaW5nKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5hcnRpY2xlQ29ubmVjdG9yLmdldEdvb2RJZEZyb21BcnRpY2xlTnIoc2t1KTtcbiAgICAgICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzcG9uc2UucmVzdWx0T2JqZWN0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0QXJ0aWNsZUZ1bGxPYmplY3QoZ29vZElkOiBudW1iZXIpOiBQcm9taXNlPEFydGljbGVGdWxsT2JqZWN0PiB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlOiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuYXJ0aWNsZUNvbm5lY3Rvci5nZXRBcnRpY2xlRnVsbE9iamVjdChnb29kSWQpO1xuICAgICAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdCAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9ib0ZhY3RvcnkubWFrZVdpdGhSYXdCYWNrZW5kRGF0YShBcnRpY2xlRnVsbE9iamVjdCwgcmVzcG9uc2UucmVzdWx0T2JqZWN0KSBhcyBBcnRpY2xlRnVsbE9iamVjdDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldFN1cGVyQXJ0aWNsZShpZDogc3RyaW5nLCBicmFuY2g/OiBzdHJpbmcpOiBQcm9taXNlPFN1cGVyQXJ0aWNsZT4ge1xuICAgICAgICBjb25zdCByZXNwb25zZTogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmFydGljbGVDb25uZWN0b3IuZ2V0U3VwZXJBcnRpY2xlUXVpY2tTZWwoaWQsIGJyYW5jaCk7XG4gICAgICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2JvRmFjdG9yeS5tYWtlV2l0aFJhd0JhY2tlbmREYXRhKFN1cGVyQXJ0aWNsZSwgcmVzcG9uc2UucmVzdWx0T2JqZWN0KSBhcyBTdXBlckFydGljbGU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXREb2N1bWVudENvbnRlbnQoZG9jSWQ6IG51bWJlciwgdGh1bWJuYWlsOiBib29sZWFuID0gdHJ1ZSk6IFByb21pc2U8RG9jdW1lbnRDb250ZW50PiB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlOiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuYXJ0aWNsZUNvbm5lY3Rvci5nZXREb2N1bWVudENvbnRlbnQoZG9jSWQsIHRodW1ibmFpbCk7XG4gICAgICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2JvRmFjdG9yeS5tYWtlV2l0aFJhd0JhY2tlbmREYXRhKERvY3VtZW50Q29udGVudCwgcmVzcG9uc2UucmVzdWx0T2JqZWN0KSBhcyB1bmtub3duIGFzIERvY3VtZW50Q29udGVudDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGFkZFdlYlNlc3Npb25UcmFuc2FjdGlvbkxpbmUodHJhbnNhY3Rpb25VdWlkOiBzdHJpbmcsIHNrdTogc3RyaW5nLCBxdWFudGl0eTogbnVtYmVyKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy50cmFuc2FjdGlvbkNvbm5lY3Rvci5hZGRXZWJTZXNzaW9uVHJhbnNhY3Rpb25MaW5lKHRyYW5zYWN0aW9uVXVpZCwgc2t1LCBxdWFudGl0eSk7XG4gICAgICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xuICAgICAgICAgICAgY29uc3QgaW5mb1Jlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSA9IHRoaXMuX2JvRmFjdG9yeS5tYWtlV2l0aFJhd0JhY2tlbmREYXRhKFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlLCByZXNwb25zZS5yZXN1bHRPYmplY3QpIGFzIFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlO1xuICAgICAgICAgICAgcmV0dXJuIGluZm9SZXNwb25zZS50cmFuc2FjdGlvbkluZm8udXVpZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG59XG4iXX0=