@colijnit/sharedcomponents 1.0.10 → 1.0.13
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/bundles/colijnit-sharedcomponents.umd.js +1574 -44
- package/bundles/colijnit-sharedcomponents.umd.js.map +1 -1
- package/colijnit-sharedcomponents.d.ts +7 -0
- package/colijnit-sharedcomponents.metadata.json +1 -1
- package/esm2015/colijnit-sharedcomponents.js +8 -1
- package/esm2015/lib/components/send-method-dialog/enums/send-option.js +8 -0
- package/esm2015/lib/components/send-method-dialog/send-method-dialog.component.js +221 -0
- package/esm2015/lib/components/send-method-dialog/send-method-dialog.module.js +27 -0
- package/esm2015/lib/components/stock/stock-information/stock-information.component.js +55 -0
- package/esm2015/lib/components/stock/stock-information-grid/stock-information-grid.component.js +258 -0
- package/esm2015/lib/components/stock/stock-location/stock-location.component.js +68 -0
- package/esm2015/lib/components/stock/stock-transfer/co-drop-down-list-fields.interface.js +2 -0
- package/esm2015/lib/components/stock/stock-transfer/stock-transfer.component.js +98 -0
- package/esm2015/lib/components/stock/stock.component.js +111 -0
- package/esm2015/lib/components/stock/stock.module.js +45 -0
- package/esm2015/lib/enum/icon.enum.js +23 -0
- package/esm2015/lib/factory/business-object-factory.js +120 -0
- package/esm2015/lib/factory/decorators/boolean.decorator.js +102 -0
- package/esm2015/lib/factory/decorators/complex-array.decorator.js +55 -0
- package/esm2015/lib/factory/decorators/complex-field.decorator.js +57 -0
- package/esm2015/lib/factory/decorators/date-field.decorator.js +36 -0
- package/esm2015/lib/factory/decorators/string-number.decorator.js +43 -0
- package/esm2015/lib/model/business-object.js +81 -0
- package/esm2015/lib/model/icon-svg.js +22 -0
- package/esm2015/lib/service/icon-cache.service.js +51 -0
- package/esm2015/lib/service/ione-connector-adapter.service.js +162 -0
- package/esm2015/lib/service/stock.service.js +41 -0
- package/esm2015/lib/utils/array-utils.js +183 -0
- package/esm2015/lib/utils/is-nill.function.js +5 -0
- package/esm2015/public-api.js +5 -1
- package/fesm2015/colijnit-sharedcomponents.js +1815 -2
- package/fesm2015/colijnit-sharedcomponents.js.map +1 -1
- package/lib/components/send-method-dialog/enums/send-option.d.ts +6 -0
- package/lib/components/send-method-dialog/send-method-dialog.component.d.ts +41 -0
- package/lib/components/send-method-dialog/send-method-dialog.module.d.ts +2 -0
- package/lib/components/send-method-dialog/style/_layout.scss +192 -0
- package/lib/components/send-method-dialog/style/_material-definition.scss +1 -0
- package/lib/components/send-method-dialog/style/_theme.scss +7 -0
- package/lib/components/send-method-dialog/style/material.scss +4 -0
- package/lib/components/stock/stock-information/stock-information.component.d.ts +11 -0
- package/lib/components/stock/stock-information-grid/stock-information-grid.component.d.ts +47 -0
- package/lib/components/stock/stock-location/stock-location.component.d.ts +16 -0
- package/lib/components/stock/stock-transfer/co-drop-down-list-fields.interface.d.ts +4 -0
- package/lib/components/stock/stock-transfer/stock-transfer.component.d.ts +21 -0
- package/lib/components/stock/stock.component.d.ts +32 -0
- package/lib/components/stock/stock.module.d.ts +2 -0
- package/lib/components/stock/style/_layout.scss +206 -0
- package/lib/components/stock/style/_material-definition.scss +20 -0
- package/lib/components/stock/style/_theme.scss +8 -0
- package/lib/components/stock/style/material.scss +4 -0
- package/lib/enum/icon.enum.d.ts +21 -0
- package/lib/factory/business-object-factory.d.ts +23 -0
- package/lib/factory/decorators/boolean.decorator.d.ts +43 -0
- package/lib/factory/decorators/complex-array.decorator.d.ts +25 -0
- package/lib/factory/decorators/complex-field.decorator.d.ts +25 -0
- package/lib/factory/decorators/date-field.decorator.d.ts +17 -0
- package/lib/factory/decorators/string-number.decorator.d.ts +22 -0
- package/lib/model/business-object.d.ts +7 -0
- package/lib/model/icon-svg.d.ts +4 -0
- package/lib/service/icon-cache.service.d.ts +18 -0
- package/lib/service/ione-connector-adapter.service.d.ts +26 -0
- package/lib/service/stock.service.d.ts +17 -0
- package/lib/utils/array-utils.d.ts +57 -0
- package/lib/utils/is-nill.function.d.ts +1 -0
- package/package.json +6 -5
- package/public-api.d.ts +4 -0
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import { __awaiter } from "tslib";
|
|
2
|
+
import { Component, EventEmitter, HostBinding, Input, Output, ViewChild, ViewEncapsulation } from "@angular/core";
|
|
3
|
+
import { StockService } from "../../service/stock.service";
|
|
4
|
+
import { PrintStockStickers } from "@colijnit/articleapi/build/model/print-stock-stickers";
|
|
5
|
+
import { ArticleStock } from "@colijnit/articleapi/build/model/article-stock";
|
|
6
|
+
export class StockComponent {
|
|
7
|
+
constructor(stockService) {
|
|
8
|
+
this.stockService = stockService;
|
|
9
|
+
this.handleStickerClicked = new EventEmitter();
|
|
10
|
+
this.showStockInformationGrid = true;
|
|
11
|
+
this.showStockLocation = false;
|
|
12
|
+
this.showStockTransfer = false;
|
|
13
|
+
}
|
|
14
|
+
set options(value) {
|
|
15
|
+
this.stockService.connectConnector(value);
|
|
16
|
+
}
|
|
17
|
+
set article(article) {
|
|
18
|
+
this.articleExtended = article;
|
|
19
|
+
this.getStockInformation(article);
|
|
20
|
+
}
|
|
21
|
+
;
|
|
22
|
+
showClass() {
|
|
23
|
+
return true;
|
|
24
|
+
}
|
|
25
|
+
// ngAfterViewInit() {
|
|
26
|
+
// if(this.article) {
|
|
27
|
+
// this.getStockInformation(this.article as any);
|
|
28
|
+
// }
|
|
29
|
+
// }
|
|
30
|
+
backToStockLinesClicked() {
|
|
31
|
+
this.showStockLocation = false;
|
|
32
|
+
this.showStockInformationGrid = true;
|
|
33
|
+
}
|
|
34
|
+
handleStockTransferClick(event) {
|
|
35
|
+
this.stockTransferArticle = event;
|
|
36
|
+
this.showStockTransfer = !this.showStockTransfer;
|
|
37
|
+
this.showStockInformationGrid = !this.showStockInformationGrid;
|
|
38
|
+
this.stockService.stockStickers = new PrintStockStickers();
|
|
39
|
+
}
|
|
40
|
+
backToStock() {
|
|
41
|
+
this.showStockTransfer = !this.showStockTransfer;
|
|
42
|
+
this.showStockInformationGrid = !this.showStockInformationGrid;
|
|
43
|
+
}
|
|
44
|
+
loadStockHistory(data) {
|
|
45
|
+
this.stockService.getStockHistory(data);
|
|
46
|
+
}
|
|
47
|
+
buttonClick() {
|
|
48
|
+
this.getStockInformation(this.article);
|
|
49
|
+
}
|
|
50
|
+
getStockInformation(data) {
|
|
51
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
52
|
+
const articleData = new ArticleStock();
|
|
53
|
+
articleData.goodId = data.goodId.toString();
|
|
54
|
+
articleData.viewKind = "M";
|
|
55
|
+
this.stockInformation = yield this.stockService.getStockInformation(articleData);
|
|
56
|
+
// const allAvailableStock = this.stockInformation.reduce((a, b) => a.availableStock + b.availableStock ? a : b);
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
getStockLocationInformation(data) {
|
|
60
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
61
|
+
this.stockLocationInformation = yield this.stockService.getStockInformation(data);
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
StockComponent.decorators = [
|
|
66
|
+
{ type: Component, args: [{
|
|
67
|
+
selector: "co-stock",
|
|
68
|
+
template: `
|
|
69
|
+
<div class="stock-info-container">
|
|
70
|
+
<co-stock-information [article]="articleExtended"
|
|
71
|
+
[articleStock]="">
|
|
72
|
+
|
|
73
|
+
</co-stock-information>
|
|
74
|
+
<hr>
|
|
75
|
+
<co-stock-information-grid *ngIf="showStockInformationGrid"
|
|
76
|
+
[stockLocationData]="stockLocationInformation"
|
|
77
|
+
(locationLineClicked)="getStockLocationInformation($event)"
|
|
78
|
+
[articleStockInformation]="stockInformation"
|
|
79
|
+
(transferIconClicked)="handleStockTransferClick($event)">
|
|
80
|
+
</co-stock-information-grid>
|
|
81
|
+
<co-stock-location *ngIf="showStockLocation"
|
|
82
|
+
(backToStockLines)="backToStockLinesClicked()">
|
|
83
|
+
|
|
84
|
+
</co-stock-location>
|
|
85
|
+
<co-stock-transfer *ngIf="showStockTransfer"
|
|
86
|
+
(handleCancelClicked)="backToStock()"
|
|
87
|
+
[article]="stockTransferArticle"
|
|
88
|
+
[stockSticker]="stockService.stockStickers"
|
|
89
|
+
(handleStickerClicked)="handleStickerClicked.emit($event)"
|
|
90
|
+
[articleWarehouse]="articleWarehouse"
|
|
91
|
+
[allWarehouses]="allWarehouses"
|
|
92
|
+
>
|
|
93
|
+
</co-stock-transfer>
|
|
94
|
+
</div>
|
|
95
|
+
`,
|
|
96
|
+
encapsulation: ViewEncapsulation.None
|
|
97
|
+
},] }
|
|
98
|
+
];
|
|
99
|
+
StockComponent.ctorParameters = () => [
|
|
100
|
+
{ type: StockService }
|
|
101
|
+
];
|
|
102
|
+
StockComponent.propDecorators = {
|
|
103
|
+
stock: [{ type: ViewChild, args: [StockComponent,] }],
|
|
104
|
+
handleStickerClicked: [{ type: Output }],
|
|
105
|
+
options: [{ type: Input }],
|
|
106
|
+
article: [{ type: Input }],
|
|
107
|
+
articleWarehouse: [{ type: Input }],
|
|
108
|
+
allWarehouses: [{ type: Input }],
|
|
109
|
+
showClass: [{ type: HostBinding, args: ["class.co-stock",] }]
|
|
110
|
+
};
|
|
111
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvY2suY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2hhcmVkY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvc3RvY2svc3RvY2suY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBRUwsU0FBUyxFQUNULFlBQVksRUFDWixXQUFXLEVBQ1gsS0FBSyxFQUNMLE1BQU0sRUFDTixTQUFTLEVBQ1QsaUJBQWlCLEVBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSw2QkFBNkIsQ0FBQztBQUN6RCxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSx1REFBdUQsQ0FBQztBQUl6RixPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sZ0RBQWdELENBQUM7QUFrQzVFLE1BQU0sT0FBTyxjQUFjO0lBdUN6QixZQUNTLFlBQTBCO1FBQTFCLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBbEM1Qix5QkFBb0IsR0FBc0IsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQXdCN0QsNkJBQXdCLEdBQVksSUFBSSxDQUFDO1FBQ3pDLHNCQUFpQixHQUFZLEtBQUssQ0FBQztRQUNuQyxzQkFBaUIsR0FBWSxLQUFLLENBQUM7SUFVMUMsQ0FBQztJQWxDRCxJQUNXLE9BQU8sQ0FBQyxLQUFVO1FBQzNCLElBQUksQ0FBQyxZQUFZLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVELElBQ1csT0FBTyxDQUFDLE9BQU87UUFDeEIsSUFBSSxDQUFDLGVBQWUsR0FBRyxPQUFPLENBQUM7UUFDL0IsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFBQSxDQUFDO0lBU0ssU0FBUztRQUNkLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQWdCRCxzQkFBc0I7SUFDdEIsdUJBQXVCO0lBQ3ZCLHFEQUFxRDtJQUNyRCxNQUFNO0lBQ04sSUFBSTtJQUVHLHVCQUF1QjtRQUM1QixJQUFJLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxDQUFDO1FBQy9CLElBQUksQ0FBQyx3QkFBd0IsR0FBRyxJQUFJLENBQUM7SUFDdkMsQ0FBQztJQUVNLHdCQUF3QixDQUFDLEtBQUs7UUFDbkMsSUFBSSxDQUFDLG9CQUFvQixHQUFHLEtBQUssQ0FBQztRQUNsQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUM7UUFDakQsSUFBSSxDQUFDLHdCQUF3QixHQUFHLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDO1FBQy9ELElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxHQUFHLElBQUksa0JBQWtCLEVBQUUsQ0FBQztJQUM3RCxDQUFDO0lBRU0sV0FBVztRQUNoQixJQUFJLENBQUMsaUJBQWlCLEdBQUcsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUM7UUFDakQsSUFBSSxDQUFDLHdCQUF3QixHQUFHLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDO0lBQ2pFLENBQUM7SUFFTSxnQkFBZ0IsQ0FBQyxJQUE0QjtRQUNsRCxJQUFJLENBQUMsWUFBWSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRU0sV0FBVztRQUNoQixJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLE9BQWMsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFWSxtQkFBbUIsQ0FBQyxJQUFrQjs7WUFDakQsTUFBTSxXQUFXLEdBQWlCLElBQUksWUFBWSxFQUFFLENBQUM7WUFDckQsV0FBVyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQzVDLFdBQVcsQ0FBQyxRQUFRLEdBQUcsR0FBRyxDQUFDO1lBQzNCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsbUJBQW1CLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDakYsaUhBQWlIO1FBQ25ILENBQUM7S0FBQTtJQUVZLDJCQUEyQixDQUFDLElBQWtCOztZQUN6RCxJQUFJLENBQUMsd0JBQXdCLEdBQUcsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3BGLENBQUM7S0FBQTs7O1lBckhGLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsVUFBVTtnQkFDcEIsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EyQlQ7Z0JBQ0QsYUFBYSxFQUFFLGlCQUFpQixDQUFDLElBQUk7YUFDdEM7OztZQXRDTyxZQUFZOzs7b0JBeUNqQixTQUFTLFNBQUMsY0FBYzttQ0FHeEIsTUFBTTtzQkFHTixLQUFLO3NCQUtMLEtBQUs7K0JBTUwsS0FBSzs0QkFHTCxLQUFLO3dCQUdMLFdBQVcsU0FBQyxnQkFBZ0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIEFmdGVyVmlld0luaXQsXHJcbiAgQ29tcG9uZW50LFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBIb3N0QmluZGluZyxcclxuICBJbnB1dCwgT25Jbml0LFxyXG4gIE91dHB1dCxcclxuICBWaWV3Q2hpbGQsXHJcbiAgVmlld0VuY2Fwc3VsYXRpb25cclxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQge1N0b2NrU2VydmljZX0gZnJvbSBcIi4uLy4uL3NlcnZpY2Uvc3RvY2suc2VydmljZVwiO1xyXG5pbXBvcnQge1ByaW50U3RvY2tTdGlja2Vyc30gZnJvbSBcIkBjb2xpam5pdC9hcnRpY2xlYXBpL2J1aWxkL21vZGVsL3ByaW50LXN0b2NrLXN0aWNrZXJzXCI7XHJcbmltcG9ydCB7R2V0U3RvY2tIaXN0b3J5UmVxdWVzdH0gZnJvbSBcIkBjb2xpam5pdC9hcnRpY2xlYXBpL2J1aWxkL21vZGVsL2dldC1zdG9jay1oaXN0b3J5LXJlcXVlc3RcIjtcclxuaW1wb3J0IHtBcnRpY2xlU3RvY2tCb30gZnJvbSBcIkBjb2xpam5pdC9hcnRpY2xlYXBpL2J1aWxkL21vZGVsL2FydGljbGUtc3RvY2suYm9cIjtcclxuaW1wb3J0IHtBcnRpY2xlRXh0ZW5kZWR9IGZyb20gXCJAY29saWpuaXQvYXJ0aWNsZWFwaS9idWlsZC9tb2RlbC9hcnRpY2xlLWV4dGVuZGVkLmJvXCI7XHJcbmltcG9ydCB7QXJ0aWNsZVN0b2NrfSBmcm9tIFwiQGNvbGlqbml0L2FydGljbGVhcGkvYnVpbGQvbW9kZWwvYXJ0aWNsZS1zdG9ja1wiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6IFwiY28tc3RvY2tcIixcclxuICB0ZW1wbGF0ZTogYFxyXG4gICAgICA8ZGl2IGNsYXNzPVwic3RvY2staW5mby1jb250YWluZXJcIj5cclxuICAgICAgICA8Y28tc3RvY2staW5mb3JtYXRpb24gW2FydGljbGVdPVwiYXJ0aWNsZUV4dGVuZGVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FydGljbGVTdG9ja109XCJcIj5cclxuXHJcbiAgICAgICAgPC9jby1zdG9jay1pbmZvcm1hdGlvbj5cclxuICAgICAgICA8aHI+XHJcbiAgICAgICAgPGNvLXN0b2NrLWluZm9ybWF0aW9uLWdyaWQgKm5nSWY9XCJzaG93U3RvY2tJbmZvcm1hdGlvbkdyaWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdG9ja0xvY2F0aW9uRGF0YV09XCJzdG9ja0xvY2F0aW9uSW5mb3JtYXRpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb2NhdGlvbkxpbmVDbGlja2VkKT1cImdldFN0b2NrTG9jYXRpb25JbmZvcm1hdGlvbigkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXJ0aWNsZVN0b2NrSW5mb3JtYXRpb25dPVwic3RvY2tJbmZvcm1hdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRyYW5zZmVySWNvbkNsaWNrZWQpPVwiaGFuZGxlU3RvY2tUcmFuc2ZlckNsaWNrKCRldmVudClcIj5cclxuICAgICAgICA8L2NvLXN0b2NrLWluZm9ybWF0aW9uLWdyaWQ+XHJcbiAgICAgICAgPGNvLXN0b2NrLWxvY2F0aW9uICpuZ0lmPVwic2hvd1N0b2NrTG9jYXRpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAoYmFja1RvU3RvY2tMaW5lcyk9XCJiYWNrVG9TdG9ja0xpbmVzQ2xpY2tlZCgpXCI+XHJcblxyXG4gICAgICAgIDwvY28tc3RvY2stbG9jYXRpb24+XHJcbiAgICAgICAgPGNvLXN0b2NrLXRyYW5zZmVyICpuZ0lmPVwic2hvd1N0b2NrVHJhbnNmZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAoaGFuZGxlQ2FuY2VsQ2xpY2tlZCk9XCJiYWNrVG9TdG9jaygpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthcnRpY2xlXT1cInN0b2NrVHJhbnNmZXJBcnRpY2xlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0b2NrU3RpY2tlcl09XCJzdG9ja1NlcnZpY2Uuc3RvY2tTdGlja2Vyc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIChoYW5kbGVTdGlja2VyQ2xpY2tlZCk9XCJoYW5kbGVTdGlja2VyQ2xpY2tlZC5lbWl0KCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbYXJ0aWNsZVdhcmVob3VzZV09XCJhcnRpY2xlV2FyZWhvdXNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FsbFdhcmVob3VzZXNdPVwiYWxsV2FyZWhvdXNlc1wiXHJcbiAgICAgICAgPlxyXG4gICAgICAgIDwvY28tc3RvY2stdHJhbnNmZXI+XHJcbiAgICAgIDwvZGl2PlxyXG4gIGAsXHJcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxyXG59KVxyXG5leHBvcnQgY2xhc3MgU3RvY2tDb21wb25lbnQge1xyXG5cclxuICBAVmlld0NoaWxkKFN0b2NrQ29tcG9uZW50KVxyXG4gIHB1YmxpYyBzdG9jazogU3RvY2tDb21wb25lbnQ7XHJcblxyXG4gIEBPdXRwdXQoKVxyXG4gIHB1YmxpYyBoYW5kbGVTdGlja2VyQ2xpY2tlZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHNldCBvcHRpb25zKHZhbHVlOiBhbnkpIHtcclxuICAgIHRoaXMuc3RvY2tTZXJ2aWNlLmNvbm5lY3RDb25uZWN0b3IodmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgc2V0IGFydGljbGUoYXJ0aWNsZSkge1xyXG4gICAgdGhpcy5hcnRpY2xlRXh0ZW5kZWQgPSBhcnRpY2xlO1xyXG4gICAgdGhpcy5nZXRTdG9ja0luZm9ybWF0aW9uKGFydGljbGUpO1xyXG4gIH07XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGFydGljbGVXYXJlaG91c2U6IGFueVtdO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBhbGxXYXJlaG91c2VzOiBhbnlbXTtcclxuXHJcbiAgQEhvc3RCaW5kaW5nKFwiY2xhc3MuY28tc3RvY2tcIilcclxuICBwdWJsaWMgc2hvd0NsYXNzKCkge1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2hvd1N0b2NrSW5mb3JtYXRpb25HcmlkOiBib29sZWFuID0gdHJ1ZTtcclxuICBwdWJsaWMgc2hvd1N0b2NrTG9jYXRpb246IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgc2hvd1N0b2NrVHJhbnNmZXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgYXJ0aWNsZVN0b2NrSW5mb3JtYXRpb246IEFydGljbGVTdG9jaztcclxuICBwdWJsaWMgc3RvY2tJbmZvcm1hdGlvbjogQXJ0aWNsZVN0b2NrQm9bXTtcclxuICBwdWJsaWMgc3RvY2tMb2NhdGlvbkluZm9ybWF0aW9uOiBBcnRpY2xlU3RvY2tCb1tdO1xyXG4gIHB1YmxpYyBzdG9ja1RyYW5zZmVyQXJ0aWNsZTogQXJ0aWNsZVN0b2NrQm87XHJcbiAgcHVibGljIGFydGljbGVFeHRlbmRlZDogQXJ0aWNsZUV4dGVuZGVkO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHB1YmxpYyBzdG9ja1NlcnZpY2U6IFN0b2NrU2VydmljZVxyXG4gICkge1xyXG4gIH1cclxuXHJcbiAgLy8gbmdBZnRlclZpZXdJbml0KCkge1xyXG4gIC8vICAgaWYodGhpcy5hcnRpY2xlKSB7XHJcbiAgLy8gICAgIHRoaXMuZ2V0U3RvY2tJbmZvcm1hdGlvbih0aGlzLmFydGljbGUgYXMgYW55KTtcclxuICAvLyAgIH1cclxuICAvLyB9XHJcblxyXG4gIHB1YmxpYyBiYWNrVG9TdG9ja0xpbmVzQ2xpY2tlZCgpOiB2b2lkIHtcclxuICAgIHRoaXMuc2hvd1N0b2NrTG9jYXRpb24gPSBmYWxzZTtcclxuICAgIHRoaXMuc2hvd1N0b2NrSW5mb3JtYXRpb25HcmlkID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBoYW5kbGVTdG9ja1RyYW5zZmVyQ2xpY2soZXZlbnQpOiB2b2lkIHtcclxuICAgIHRoaXMuc3RvY2tUcmFuc2ZlckFydGljbGUgPSBldmVudDtcclxuICAgIHRoaXMuc2hvd1N0b2NrVHJhbnNmZXIgPSAhdGhpcy5zaG93U3RvY2tUcmFuc2ZlcjtcclxuICAgIHRoaXMuc2hvd1N0b2NrSW5mb3JtYXRpb25HcmlkID0gIXRoaXMuc2hvd1N0b2NrSW5mb3JtYXRpb25HcmlkO1xyXG4gICAgdGhpcy5zdG9ja1NlcnZpY2Uuc3RvY2tTdGlja2VycyA9IG5ldyBQcmludFN0b2NrU3RpY2tlcnMoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBiYWNrVG9TdG9jaygpOiB2b2lkIHtcclxuICAgIHRoaXMuc2hvd1N0b2NrVHJhbnNmZXIgPSAhdGhpcy5zaG93U3RvY2tUcmFuc2ZlcjtcclxuICAgIHRoaXMuc2hvd1N0b2NrSW5mb3JtYXRpb25HcmlkID0gIXRoaXMuc2hvd1N0b2NrSW5mb3JtYXRpb25HcmlkO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGxvYWRTdG9ja0hpc3RvcnkoZGF0YTogR2V0U3RvY2tIaXN0b3J5UmVxdWVzdCk6IHZvaWQge1xyXG4gICAgdGhpcy5zdG9ja1NlcnZpY2UuZ2V0U3RvY2tIaXN0b3J5KGRhdGEpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGJ1dHRvbkNsaWNrKCk6IHZvaWQge1xyXG4gICAgdGhpcy5nZXRTdG9ja0luZm9ybWF0aW9uKHRoaXMuYXJ0aWNsZSBhcyBhbnkpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldFN0b2NrSW5mb3JtYXRpb24oZGF0YTogQXJ0aWNsZVN0b2NrKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBjb25zdCBhcnRpY2xlRGF0YTogQXJ0aWNsZVN0b2NrID0gbmV3IEFydGljbGVTdG9jaygpO1xyXG4gICAgYXJ0aWNsZURhdGEuZ29vZElkID0gZGF0YS5nb29kSWQudG9TdHJpbmcoKTtcclxuICAgIGFydGljbGVEYXRhLnZpZXdLaW5kID0gXCJNXCI7XHJcbiAgICB0aGlzLnN0b2NrSW5mb3JtYXRpb24gPSBhd2FpdCB0aGlzLnN0b2NrU2VydmljZS5nZXRTdG9ja0luZm9ybWF0aW9uKGFydGljbGVEYXRhKTtcclxuICAgIC8vIGNvbnN0IGFsbEF2YWlsYWJsZVN0b2NrID0gdGhpcy5zdG9ja0luZm9ybWF0aW9uLnJlZHVjZSgoYSwgYikgPT4gYS5hdmFpbGFibGVTdG9jayArIGIuYXZhaWxhYmxlU3RvY2sgPyBhIDogYik7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0U3RvY2tMb2NhdGlvbkluZm9ybWF0aW9uKGRhdGE6IEFydGljbGVTdG9jayk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy5zdG9ja0xvY2F0aW9uSW5mb3JtYXRpb24gPSBhd2FpdCB0aGlzLnN0b2NrU2VydmljZS5nZXRTdG9ja0luZm9ybWF0aW9uKGRhdGEpO1xyXG4gIH1cclxuXHJcbn1cclxuIl19
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { NgModule } from "@angular/core";
|
|
2
|
+
import { StockComponent } from "./stock.component";
|
|
3
|
+
import { ButtonModule, CoGridModule, DropDownModule, IconModule, ImageModule, InputComboBoxModule, InputRadioButtonModule, InputTextModule, SimpleGridModule } from "@colijnit/corecomponents_v12";
|
|
4
|
+
import { CommonModule } from "@angular/common";
|
|
5
|
+
import { StockInformationComponent } from "./stock-information/stock-information.component";
|
|
6
|
+
import { StockInformationGridComponent } from "./stock-information-grid/stock-information-grid.component";
|
|
7
|
+
import { StockLocationComponent } from "./stock-location/stock-location.component";
|
|
8
|
+
import { StockService } from "../../service/stock.service";
|
|
9
|
+
import { IoneConnectorAdapterService } from "../../service/ione-connector-adapter.service";
|
|
10
|
+
import { StockTransferComponent } from "./stock-transfer/stock-transfer.component";
|
|
11
|
+
import { SendMethodDialogModule } from "../send-method-dialog/send-method-dialog.module";
|
|
12
|
+
export class StockModule {
|
|
13
|
+
}
|
|
14
|
+
StockModule.decorators = [
|
|
15
|
+
{ type: NgModule, args: [{
|
|
16
|
+
imports: [
|
|
17
|
+
InputComboBoxModule,
|
|
18
|
+
CoGridModule,
|
|
19
|
+
ButtonModule,
|
|
20
|
+
CommonModule,
|
|
21
|
+
InputRadioButtonModule,
|
|
22
|
+
DropDownModule,
|
|
23
|
+
SimpleGridModule,
|
|
24
|
+
ImageModule,
|
|
25
|
+
InputTextModule,
|
|
26
|
+
SendMethodDialogModule,
|
|
27
|
+
IconModule
|
|
28
|
+
],
|
|
29
|
+
declarations: [
|
|
30
|
+
StockComponent,
|
|
31
|
+
StockInformationComponent,
|
|
32
|
+
StockInformationGridComponent,
|
|
33
|
+
StockLocationComponent,
|
|
34
|
+
StockTransferComponent
|
|
35
|
+
],
|
|
36
|
+
exports: [
|
|
37
|
+
StockComponent
|
|
38
|
+
],
|
|
39
|
+
providers: [
|
|
40
|
+
StockService,
|
|
41
|
+
IoneConnectorAdapterService
|
|
42
|
+
]
|
|
43
|
+
},] }
|
|
44
|
+
];
|
|
45
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvY2subW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2hhcmVkY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvc3RvY2svc3RvY2subW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDdkMsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBQ2pELE9BQU8sRUFDSCxZQUFZLEVBQ1osWUFBWSxFQUNaLGNBQWMsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUN2QyxtQkFBbUIsRUFDbkIsc0JBQXNCLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUM1RCxNQUFNLDhCQUE4QixDQUFDO0FBQ3RDLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUM3QyxPQUFPLEVBQUMseUJBQXlCLEVBQUMsTUFBTSxpREFBaUQsQ0FBQztBQUMxRixPQUFPLEVBQUMsNkJBQTZCLEVBQUMsTUFBTSwyREFBMkQsQ0FBQztBQUN4RyxPQUFPLEVBQUMsc0JBQXNCLEVBQUMsTUFBTSwyQ0FBMkMsQ0FBQztBQUNqRixPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sNkJBQTZCLENBQUM7QUFDekQsT0FBTyxFQUFDLDJCQUEyQixFQUFDLE1BQU0sOENBQThDLENBQUM7QUFDekYsT0FBTyxFQUFDLHNCQUFzQixFQUFDLE1BQU0sMkNBQTJDLENBQUM7QUFDakYsT0FBTyxFQUFDLHNCQUFzQixFQUFDLE1BQU0saURBQWlELENBQUM7QUErQnZGLE1BQU0sT0FBTyxXQUFXOzs7WUE3QnZCLFFBQVEsU0FBQztnQkFDTixPQUFPLEVBQUU7b0JBQ0wsbUJBQW1CO29CQUNuQixZQUFZO29CQUNaLFlBQVk7b0JBQ1osWUFBWTtvQkFDWixzQkFBc0I7b0JBQ3RCLGNBQWM7b0JBQ2QsZ0JBQWdCO29CQUNoQixXQUFXO29CQUNYLGVBQWU7b0JBQ2Ysc0JBQXNCO29CQUN0QixVQUFVO2lCQUNiO2dCQUNILFlBQVksRUFBRTtvQkFDWixjQUFjO29CQUNkLHlCQUF5QjtvQkFDekIsNkJBQTZCO29CQUM3QixzQkFBc0I7b0JBQ3RCLHNCQUFzQjtpQkFDdkI7Z0JBQ0MsT0FBTyxFQUFFO29CQUNMLGNBQWM7aUJBQ2pCO2dCQUNELFNBQVMsRUFBRTtvQkFDVCxZQUFZO29CQUNaLDJCQUEyQjtpQkFDNUI7YUFDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7TmdNb2R1bGV9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7U3RvY2tDb21wb25lbnR9IGZyb20gXCIuL3N0b2NrLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQge1xyXG4gICAgQnV0dG9uTW9kdWxlLFxyXG4gICAgQ29HcmlkTW9kdWxlLFxyXG4gICAgRHJvcERvd25Nb2R1bGUsIEljb25Nb2R1bGUsIEltYWdlTW9kdWxlLFxyXG4gICAgSW5wdXRDb21ib0JveE1vZHVsZSxcclxuICAgIElucHV0UmFkaW9CdXR0b25Nb2R1bGUsIElucHV0VGV4dE1vZHVsZSwgU2ltcGxlR3JpZE1vZHVsZVxyXG59IGZyb20gXCJAY29saWpuaXQvY29yZWNvbXBvbmVudHNfdjEyXCI7XHJcbmltcG9ydCB7Q29tbW9uTW9kdWxlfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XHJcbmltcG9ydCB7U3RvY2tJbmZvcm1hdGlvbkNvbXBvbmVudH0gZnJvbSBcIi4vc3RvY2staW5mb3JtYXRpb24vc3RvY2staW5mb3JtYXRpb24uY29tcG9uZW50XCI7XHJcbmltcG9ydCB7U3RvY2tJbmZvcm1hdGlvbkdyaWRDb21wb25lbnR9IGZyb20gXCIuL3N0b2NrLWluZm9ybWF0aW9uLWdyaWQvc3RvY2staW5mb3JtYXRpb24tZ3JpZC5jb21wb25lbnRcIjtcclxuaW1wb3J0IHtTdG9ja0xvY2F0aW9uQ29tcG9uZW50fSBmcm9tIFwiLi9zdG9jay1sb2NhdGlvbi9zdG9jay1sb2NhdGlvbi5jb21wb25lbnRcIjtcclxuaW1wb3J0IHtTdG9ja1NlcnZpY2V9IGZyb20gXCIuLi8uLi9zZXJ2aWNlL3N0b2NrLnNlcnZpY2VcIjtcclxuaW1wb3J0IHtJb25lQ29ubmVjdG9yQWRhcHRlclNlcnZpY2V9IGZyb20gXCIuLi8uLi9zZXJ2aWNlL2lvbmUtY29ubmVjdG9yLWFkYXB0ZXIuc2VydmljZVwiO1xyXG5pbXBvcnQge1N0b2NrVHJhbnNmZXJDb21wb25lbnR9IGZyb20gXCIuL3N0b2NrLXRyYW5zZmVyL3N0b2NrLXRyYW5zZmVyLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQge1NlbmRNZXRob2REaWFsb2dNb2R1bGV9IGZyb20gXCIuLi9zZW5kLW1ldGhvZC1kaWFsb2cvc2VuZC1tZXRob2QtZGlhbG9nLm1vZHVsZVwiO1xyXG5cclxuQE5nTW9kdWxlKHtcclxuICAgIGltcG9ydHM6IFtcclxuICAgICAgICBJbnB1dENvbWJvQm94TW9kdWxlLFxyXG4gICAgICAgIENvR3JpZE1vZHVsZSxcclxuICAgICAgICBCdXR0b25Nb2R1bGUsXHJcbiAgICAgICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgICAgIElucHV0UmFkaW9CdXR0b25Nb2R1bGUsXHJcbiAgICAgICAgRHJvcERvd25Nb2R1bGUsXHJcbiAgICAgICAgU2ltcGxlR3JpZE1vZHVsZSxcclxuICAgICAgICBJbWFnZU1vZHVsZSxcclxuICAgICAgICBJbnB1dFRleHRNb2R1bGUsXHJcbiAgICAgICAgU2VuZE1ldGhvZERpYWxvZ01vZHVsZSxcclxuICAgICAgICBJY29uTW9kdWxlXHJcbiAgICBdLFxyXG4gIGRlY2xhcmF0aW9uczogW1xyXG4gICAgU3RvY2tDb21wb25lbnQsXHJcbiAgICBTdG9ja0luZm9ybWF0aW9uQ29tcG9uZW50LFxyXG4gICAgU3RvY2tJbmZvcm1hdGlvbkdyaWRDb21wb25lbnQsXHJcbiAgICBTdG9ja0xvY2F0aW9uQ29tcG9uZW50LFxyXG4gICAgU3RvY2tUcmFuc2ZlckNvbXBvbmVudFxyXG4gIF0sXHJcbiAgICBleHBvcnRzOiBbXHJcbiAgICAgICAgU3RvY2tDb21wb25lbnRcclxuICAgIF0sXHJcbiAgICBwcm92aWRlcnM6IFtcclxuICAgICAgU3RvY2tTZXJ2aWNlLFxyXG4gICAgICBJb25lQ29ubmVjdG9yQWRhcHRlclNlcnZpY2VcclxuICAgIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIFN0b2NrTW9kdWxlIHt9XHJcbiJdfQ==
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/** AUTO GENERATED FILE. DO NOT CHANGE.. OR YOU WILL SUFFER THE CONSEQUENCES OF YOUR ACTIONS **/
|
|
2
|
+
export var Icon;
|
|
3
|
+
(function (Icon) {
|
|
4
|
+
Icon["ArrowFatRight"] = "arrow_fat_right";
|
|
5
|
+
Icon["ArrowPointDown"] = "arrow_point_down";
|
|
6
|
+
Icon["ArrowPointLeft"] = "arrow_point_left";
|
|
7
|
+
Icon["ArrowPointRight"] = "arrow_point_right";
|
|
8
|
+
Icon["CalendarDay"] = "calendar_day";
|
|
9
|
+
Icon["Cancel"] = "cancel";
|
|
10
|
+
Icon["DeliveryTruck"] = "delivery_truck";
|
|
11
|
+
Icon["EditPencil"] = "edit_pencil";
|
|
12
|
+
Icon["Email"] = "email";
|
|
13
|
+
Icon["Pdf"] = "pdf";
|
|
14
|
+
Icon["PlusRound"] = "plus_round";
|
|
15
|
+
Icon["Print"] = "print";
|
|
16
|
+
Icon["SignatureField"] = "signature_field";
|
|
17
|
+
Icon["Tag"] = "tag";
|
|
18
|
+
Icon["ThickLines"] = "thick_lines";
|
|
19
|
+
Icon["ThinLines"] = "thin_lines";
|
|
20
|
+
Icon["Txt"] = "txt";
|
|
21
|
+
Icon["Xml"] = "xml";
|
|
22
|
+
})(Icon || (Icon = {}));
|
|
23
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWNvbi5lbnVtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2hhcmVkY29tcG9uZW50cy9zcmMvbGliL2VudW0vaWNvbi5lbnVtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGdHQUFnRztBQUVoRyxNQUFNLENBQU4sSUFBWSxJQW1CWDtBQW5CRCxXQUFZLElBQUk7SUFDWix5Q0FBaUMsQ0FBQTtJQUNqQywyQ0FBbUMsQ0FBQTtJQUNuQywyQ0FBbUMsQ0FBQTtJQUNuQyw2Q0FBcUMsQ0FBQTtJQUNyQyxvQ0FBNEIsQ0FBQTtJQUM1Qix5QkFBaUIsQ0FBQTtJQUNqQix3Q0FBZ0MsQ0FBQTtJQUNoQyxrQ0FBMEIsQ0FBQTtJQUMxQix1QkFBZSxDQUFBO0lBQ2YsbUJBQVcsQ0FBQTtJQUNYLGdDQUF3QixDQUFBO0lBQ3hCLHVCQUFlLENBQUE7SUFDZiwwQ0FBa0MsQ0FBQTtJQUNsQyxtQkFBVyxDQUFBO0lBQ1gsa0NBQTBCLENBQUE7SUFDMUIsZ0NBQXdCLENBQUE7SUFDeEIsbUJBQVcsQ0FBQTtJQUNYLG1CQUFXLENBQUE7QUFDZixDQUFDLEVBbkJXLElBQUksS0FBSixJQUFJLFFBbUJmIiwic291cmNlc0NvbnRlbnQiOlsiLyoqIEFVVE8gR0VORVJBVEVEIEZJTEUuIERPIE5PVCBDSEFOR0UuLiBPUiBZT1UgV0lMTCBTVUZGRVIgVEhFIENPTlNFUVVFTkNFUyBPRiBZT1VSIEFDVElPTlMgKiovXHJcblxyXG5leHBvcnQgZW51bSBJY29uIHtcclxuICAgIEFycm93RmF0UmlnaHQgPSBcImFycm93X2ZhdF9yaWdodFwiLFxyXG4gICAgQXJyb3dQb2ludERvd24gPSBcImFycm93X3BvaW50X2Rvd25cIixcclxuICAgIEFycm93UG9pbnRMZWZ0ID0gXCJhcnJvd19wb2ludF9sZWZ0XCIsXHJcbiAgICBBcnJvd1BvaW50UmlnaHQgPSBcImFycm93X3BvaW50X3JpZ2h0XCIsXHJcbiAgICBDYWxlbmRhckRheSA9IFwiY2FsZW5kYXJfZGF5XCIsXHJcbiAgICBDYW5jZWwgPSBcImNhbmNlbFwiLFxyXG4gICAgRGVsaXZlcnlUcnVjayA9IFwiZGVsaXZlcnlfdHJ1Y2tcIixcclxuICAgIEVkaXRQZW5jaWwgPSBcImVkaXRfcGVuY2lsXCIsXHJcbiAgICBFbWFpbCA9IFwiZW1haWxcIixcclxuICAgIFBkZiA9IFwicGRmXCIsXHJcbiAgICBQbHVzUm91bmQgPSBcInBsdXNfcm91bmRcIixcclxuICAgIFByaW50ID0gXCJwcmludFwiLFxyXG4gICAgU2lnbmF0dXJlRmllbGQgPSBcInNpZ25hdHVyZV9maWVsZFwiLFxyXG4gICAgVGFnID0gXCJ0YWdcIixcclxuICAgIFRoaWNrTGluZXMgPSBcInRoaWNrX2xpbmVzXCIsXHJcbiAgICBUaGluTGluZXMgPSBcInRoaW5fbGluZXNcIixcclxuICAgIFR4dCA9IFwidHh0XCIsXHJcbiAgICBYbWwgPSBcInhtbFwiXHJcbn1cclxuIl19
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import { ComplexFieldDecorator } from "./decorators/complex-field.decorator";
|
|
2
|
+
import { ComplexArrayDecorator } from "./decorators/complex-array.decorator";
|
|
3
|
+
import { BooleanTextDecorator } from "./decorators/boolean.decorator";
|
|
4
|
+
import { DateFieldFieldDecorator } from "./decorators/date-field.decorator";
|
|
5
|
+
import { StringNumberDecorator } from "./decorators/string-number.decorator";
|
|
6
|
+
import { isNill } from "../utils/is-nill.function";
|
|
7
|
+
import { ArrayUtils } from "../utils/array-utils";
|
|
8
|
+
import { BusinessObject } from "../model/business-object";
|
|
9
|
+
// Factory service creates businessobjects, using their decorators in the process.
|
|
10
|
+
export class BusinessObjectFactory {
|
|
11
|
+
constructor() {
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Creates and returns a new business data object instance of given class, with all given data properties applied to it in a
|
|
15
|
+
* complex-aware style. That is, all properties on given class that are decorated with @ComplexField(..) or @ComplexArray(..) decorators
|
|
16
|
+
* become strongly typed business objects, with methods that are usable and such.
|
|
17
|
+
*
|
|
18
|
+
* @param modelClass
|
|
19
|
+
* @param {Object} rawData The object with all (possibly raw/flat/not alive) data to be applied to the created model object
|
|
20
|
+
*/
|
|
21
|
+
makeWithRawBackendData(modelClass, rawData) {
|
|
22
|
+
if (!modelClass) {
|
|
23
|
+
return undefined;
|
|
24
|
+
}
|
|
25
|
+
if (typeof modelClass !== typeof BusinessObject) {
|
|
26
|
+
return undefined;
|
|
27
|
+
}
|
|
28
|
+
const model = new modelClass();
|
|
29
|
+
this._copyAllPropertiesDecoratorProcessedFrom(rawData, model);
|
|
30
|
+
return model;
|
|
31
|
+
}
|
|
32
|
+
// see makeWithRawBackendData, this is a loop-wrapper around that method
|
|
33
|
+
makeBOArrayFromRawBackendDataArray(modelClass, arrayOfRawDatas) {
|
|
34
|
+
if (!modelClass) {
|
|
35
|
+
return undefined;
|
|
36
|
+
}
|
|
37
|
+
const trueClientBos = [];
|
|
38
|
+
if (arrayOfRawDatas) {
|
|
39
|
+
for (let i = 0, len = arrayOfRawDatas.length; i < len; i++) {
|
|
40
|
+
trueClientBos.push(this.makeWithRawBackendData(modelClass, arrayOfRawDatas[i]));
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
return trueClientBos;
|
|
44
|
+
}
|
|
45
|
+
instantiateNewBo(modelClass) {
|
|
46
|
+
return this.makeWithRawBackendData(modelClass, {});
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Applies all properties of given 'source' object to the given 'destination' businessobject, if destination has that property.
|
|
50
|
+
* Works with the @ComplexField(), @ComplexArray, @BooleanText, @CoInject and @DateField annotations of given destination model.
|
|
51
|
+
*
|
|
52
|
+
* @param sourceData Raw data to copy to destination model
|
|
53
|
+
* @param {BusinessObject} destinationModel InOut: The annotated businessobject to apply source properties to
|
|
54
|
+
*/
|
|
55
|
+
_copyAllPropertiesDecoratorProcessedFrom(sourceData, destinationModel) {
|
|
56
|
+
if (!sourceData || !destinationModel) {
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
// process all source data into destinationModel
|
|
60
|
+
for (const srcPropKey in sourceData) {
|
|
61
|
+
if (!sourceData.hasOwnProperty(srcPropKey)) {
|
|
62
|
+
continue;
|
|
63
|
+
}
|
|
64
|
+
const srcPropVal = sourceData[srcPropKey];
|
|
65
|
+
if (ComplexFieldDecorator.IsComplexField(destinationModel, srcPropKey)) {
|
|
66
|
+
const classOfField = ComplexFieldDecorator.GetComplexFieldType(destinationModel, srcPropKey);
|
|
67
|
+
destinationModel[srcPropKey] = this.makeWithRawBackendData(classOfField, srcPropVal);
|
|
68
|
+
}
|
|
69
|
+
else if (ComplexArrayDecorator.IsComplexArray(destinationModel, srcPropKey)) {
|
|
70
|
+
const sourceArray = srcPropVal;
|
|
71
|
+
if (!sourceArray) {
|
|
72
|
+
continue;
|
|
73
|
+
}
|
|
74
|
+
const classOfArrayItems = ComplexArrayDecorator.GetComplexArrayType(destinationModel, srcPropKey);
|
|
75
|
+
const tempArray = [];
|
|
76
|
+
for (let i = 0, len = sourceArray.length; i < len; i++) {
|
|
77
|
+
tempArray.push(this.makeWithRawBackendData(classOfArrayItems, sourceArray[i]));
|
|
78
|
+
}
|
|
79
|
+
destinationModel[srcPropKey] = tempArray;
|
|
80
|
+
}
|
|
81
|
+
else if (BooleanTextDecorator.IsBooleanTextField(destinationModel, srcPropKey)) {
|
|
82
|
+
// logical 'true' and 'false' also allowed as incoming values for @BooleanText() properties: then just copy their value
|
|
83
|
+
if (typeof srcPropVal === "boolean") {
|
|
84
|
+
destinationModel[srcPropKey] = srcPropVal;
|
|
85
|
+
// here, it should be a 'J' or 'N' (or 'T' or 'F'): assign the associated boolean value
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
destinationModel[srcPropKey] = BooleanTextDecorator.GetLogicalBooleanValue(srcPropVal);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
else if (DateFieldFieldDecorator.IsDateField(destinationModel, srcPropKey)) {
|
|
92
|
+
destinationModel[srcPropKey] = DateFieldFieldDecorator.StringAsDate(srcPropVal);
|
|
93
|
+
}
|
|
94
|
+
else if (StringNumberDecorator.IsStringNumber(destinationModel, srcPropKey)) {
|
|
95
|
+
destinationModel[srcPropKey] = StringNumberDecorator.StringAsNumber(srcPropVal);
|
|
96
|
+
}
|
|
97
|
+
// non-decorated prop
|
|
98
|
+
else {
|
|
99
|
+
if (isNill(srcPropVal)) {
|
|
100
|
+
destinationModel[srcPropKey] = undefined;
|
|
101
|
+
}
|
|
102
|
+
else if (Array.isArray(srcPropVal)) {
|
|
103
|
+
destinationModel[srcPropKey] = ArrayUtils.CloneArray(srcPropVal);
|
|
104
|
+
}
|
|
105
|
+
else if (typeof srcPropVal === "object") {
|
|
106
|
+
if (srcPropVal instanceof Map) { //just copy the value in case of maps
|
|
107
|
+
destinationModel[srcPropKey] = srcPropVal;
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
destinationModel[srcPropKey] = Object.assign({}, srcPropVal);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
destinationModel[srcPropKey] = srcPropVal;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVzaW5lc3Mtb2JqZWN0LWZhY3RvcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaGFyZWRjb21wb25lbnRzL3NyYy9saWIvZmFjdG9yeS9idXNpbmVzcy1vYmplY3QtZmFjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSxzQ0FBc0MsQ0FBQztBQUMzRSxPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSxzQ0FBc0MsQ0FBQztBQUMzRSxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNwRSxPQUFPLEVBQUMsdUJBQXVCLEVBQUMsTUFBTSxtQ0FBbUMsQ0FBQztBQUMxRSxPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSxzQ0FBc0MsQ0FBQztBQUMzRSxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFDakQsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ2hELE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUV4RCxrRkFBa0Y7QUFDbEYsTUFBTSxPQUFPLHFCQUFxQjtJQUM5QjtJQUNBLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0ksc0JBQXNCLENBQUMsVUFBZSxFQUFFLE9BQWU7UUFDMUQsSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNiLE9BQU8sU0FBUyxDQUFDO1NBQ3BCO1FBQ0QsSUFBSSxPQUFPLFVBQVUsS0FBSyxPQUFPLGNBQWMsRUFBRTtZQUM3QyxPQUFPLFNBQVMsQ0FBQztTQUNwQjtRQUVELE1BQU0sS0FBSyxHQUFtQixJQUFJLFVBQVUsRUFBRSxDQUFDO1FBQy9DLElBQUksQ0FBQyx3Q0FBd0MsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDOUQsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztJQUVELHdFQUF3RTtJQUNq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QUFDLEdBQUcsdUJBQXVCLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2FBQ25GO2lCQUFNLElBQUkscUJBQXFCLENBQUMsY0FBYyxDQUFDLGdCQUFnQixFQUFFLFVBQVUsQ0FBQyxFQUFFO2dCQUMzRSxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsR0FBRyxxQkFBcUIsQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLENBQUM7YUFDbkY7WUFDRCxxQkFBcUI7aUJBQ2hCO2dCQUNELElBQUksTUFBTSxDQUFDLFVBQVUsQ0FBQyxFQUFFO29CQUNwQixnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsR0FBRyxTQUFTLENBQUM7aUJBQzVDO3FCQUFNLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsRUFBRTtvQkFDbEMsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLEdBQUcsVUFBVSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQztpQkFDcEU7cUJBQU0sSUFBSSxPQUFPLFVBQVUsS0FBSyxRQUFRLEVBQUU7b0JBQ3ZDLElBQUksVUFBVSxZQUFZLEdBQUcsRUFBRSxFQUFFLHFDQUFxQzt3QkFDbEUsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLEdBQUcsVUFBVSxDQUFDO3FCQUM3Qzt5QkFBTTt3QkFDSCxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxVQUFVLENBQUMsQ0FBQztxQkFDaEU7aUJBQ0o7cUJBQU07b0JBQ0gsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLEdBQUcsVUFBVSxDQUFDO2lCQUM3QzthQUNKO1NBQ0o7SUFDTCxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBsZXhGaWVsZERlY29yYXRvcn0gZnJvbSBcIi4vZGVjb3JhdG9ycy9jb21wbGV4LWZpZWxkLmRlY29yYXRvclwiO1xyXG5pbXBvcnQge0NvbXBsZXhBcnJheURlY29yYXRvcn0gZnJvbSBcIi4vZGVjb3JhdG9ycy9jb21wbGV4LWFycmF5LmRlY29yYXRvclwiO1xyXG5pbXBvcnQge0Jvb2xlYW5UZXh0RGVjb3JhdG9yfSBmcm9tIFwiLi9kZWNvcmF0b3JzL2Jvb2xlYW4uZGVjb3JhdG9yXCI7XHJcbmltcG9ydCB7RGF0ZUZpZWxkRmllbGREZWNvcmF0b3J9IGZyb20gXCIuL2RlY29yYXRvcnMvZGF0ZS1maWVsZC5kZWNvcmF0b3JcIjtcclxuaW1wb3J0IHtTdHJpbmdOdW1iZXJEZWNvcmF0b3J9IGZyb20gXCIuL2RlY29yYXRvcnMvc3RyaW5nLW51bWJlci5kZWNvcmF0b3JcIjtcclxuaW1wb3J0IHtpc05pbGx9IGZyb20gXCIuLi91dGlscy9pcy1uaWxsLmZ1bmN0aW9uXCI7XHJcbmltcG9ydCB7QXJyYXlVdGlsc30gZnJvbSBcIi4uL3V0aWxzL2FycmF5LXV0aWxzXCI7XHJcbmltcG9ydCB7QnVzaW5lc3NPYmplY3R9IGZyb20gXCIuLi9tb2RlbC9idXNpbmVzcy1vYmplY3RcIjtcclxuXHJcbi8vIEZhY3Rvcnkgc2VydmljZSBjcmVhdGVzIGJ1c2luZXNzb2JqZWN0cywgdXNpbmcgdGhlaXIgZGVjb3JhdG9ycyBpbiB0aGUgcHJvY2Vzcy5cclxuZXhwb3J0IGNsYXNzIEJ1c2luZXNzT2JqZWN0RmFjdG9yeSB7XHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZXMgYW5kIHJldHVybnMgYSBuZXcgYnVzaW5lc3MgZGF0YSBvYmplY3QgaW5zdGFuY2Ugb2YgZ2l2ZW4gY2xhc3MsIHdpdGggYWxsIGdpdmVuIGRhdGEgcHJvcGVydGllcyBhcHBsaWVkIHRvIGl0IGluIGFcclxuICAgICAqIGNvbXBsZXgtYXdhcmUgc3R5bGUuIFRoYXQgaXMsIGFsbCBwcm9wZXJ0aWVzIG9uIGdpdmVuIGNsYXNzIHRoYXQgYXJlIGRlY29yYXRlZCB3aXRoIEBDb21wbGV4RmllbGQoLi4pIG9yIEBDb21wbGV4QXJyYXkoLi4pIGRlY29yYXRvcnNcclxuICAgICAqIGJlY29tZSBzdHJvbmdseSB0eXBlZCBidXNpbmVzcyBvYmplY3RzLCB3aXRoIG1ldGhvZHMgdGhhdCBhcmUgdXNhYmxlIGFuZCBzdWNoLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBtb2RlbENsYXNzXHJcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gcmF3RGF0YSBUaGUgb2JqZWN0IHdpdGggYWxsIChwb3NzaWJseSByYXcvZmxhdC9ub3QgYWxpdmUpIGRhdGEgdG8gYmUgYXBwbGllZCB0byB0aGUgY3JlYXRlZCBtb2RlbCBvYmplY3RcclxuICAgICAqL1xyXG4gICAgcHVibGljIG1ha2VXaXRoUmF3QmFja2VuZERhdGEobW9kZWxDbGFzczogYW55LCByYXdEYXRhOiBPYmplY3QpOiBCdXNpbmVzc09iamVjdCB7XHJcbiAgICAgICAgaWYgKCFtb2RlbENsYXNzKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0eXBlb2YgbW9kZWxDbGFzcyAhPT0gdHlwZW9mIEJ1c2luZXNzT2JqZWN0KSB7XHJcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBtb2RlbDogQnVzaW5lc3NPYmplY3QgPSBuZXcgbW9kZWxDbGFzcygpO1xyXG4gICAgICAgIHRoaXMuX2NvcHlBbGxQcm9wZXJ0aWVzRGVjb3JhdG9yUHJvY2Vzc2VkRnJvbShyYXdEYXRhLCBtb2RlbCk7XHJcbiAgICAgICAgcmV0dXJuIG1vZGVsO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIHNlZSBtYWtlV2l0aFJhd0JhY2tlbmREYXRhLCB0aGlzIGlzIGEgbG9vcC13cmFwcGVyIGFyb3VuZCB0aGF0IG1ldGhvZFxyXG4gICAgcHVibGljIG1ha2VCT0FycmF5RnJvbVJhd0JhY2tlbmREYXRhQXJyYXkobW9kZWxDbGFzczogYW55LCBhcnJheU9mUmF3RGF0YXM6IE9iamVjdFtdKTogQnVzaW5lc3NPYmplY3RbXSB7XHJcbiAgICAgICAgaWYgKCFtb2RlbENsYXNzKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCB0cnVlQ2xpZW50Qm9zOiBCdXNpbmVzc09iamVjdFtdID0gW107XHJcbiAgICAgICAgaWYgKGFycmF5T2ZSYXdEYXRhcykge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwLCBsZW46IG51bWJlciA9IGFycmF5T2ZSYXdEYXRhcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICAgICAgdHJ1ZUNsaWVudEJvcy5wdXNoKHRoaXMubWFrZVdpdGhSYXdCYWNrZW5kRGF0YShtb2RlbENsYXNzLCBhcnJheU9mUmF3RGF0YXNbaV0pKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJ1ZUNsaWVudEJvcztcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaW5zdGFudGlhdGVOZXdCbyhtb2RlbENsYXNzOiBhbnkpOiBCdXNpbmVzc09iamVjdCB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubWFrZVdpdGhSYXdCYWNrZW5kRGF0YShtb2RlbENsYXNzLCB7fSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBcHBsaWVzIGFsbCBwcm9wZXJ0aWVzIG9mIGdpdmVuICdzb3VyY2UnIG9iamVjdCB0byB0aGUgZ2l2ZW4gJ2Rlc3RpbmF0aW9uJyBidXNpbmVzc29iamVjdCwgaWYgZGVzdGluYXRpb24gaGFzIHRoYXQgcHJvcGVydHkuXHJcbiAgICAgKiBXb3JrcyB3aXRoIHRoZSBAQ29tcGxleEZpZWxkKCksIEBDb21wbGV4QXJyYXksIEBCb29sZWFuVGV4dCwgQENvSW5qZWN0IGFuZCBARGF0ZUZpZWxkIGFubm90YXRpb25zIG9mIGdpdmVuIGRlc3RpbmF0aW9uIG1vZGVsLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBzb3VyY2VEYXRhIFJhdyBkYXRhIHRvIGNvcHkgdG8gZGVzdGluYXRpb24gbW9kZWxcclxuICAgICAqIEBwYXJhbSB7QnVzaW5lc3NPYmplY3R9IGRlc3RpbmF0aW9uTW9kZWwgSW5PdXQ6IFRoZSBhbm5vdGF0ZWQgYnVzaW5lc3NvYmplY3QgdG8gYXBwbHkgc291cmNlIHByb3BlcnRpZXMgdG9cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBfY29weUFsbFByb3BlcnRpZXNEZWNvcmF0b3JQcm9jZXNzZWRGcm9tKHNvdXJjZURhdGE6IGFueSwgZGVzdGluYXRpb25Nb2RlbDogQnVzaW5lc3NPYmplY3QpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIXNvdXJjZURhdGEgfHwgIWRlc3RpbmF0aW9uTW9kZWwpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gcHJvY2VzcyBhbGwgc291cmNlIGRhdGEgaW50byBkZXN0aW5hdGlvbk1vZGVsXHJcbiAgICAgICAgZm9yIChjb25zdCBzcmNQcm9wS2V5IGluIHNvdXJjZURhdGEpIHtcclxuICAgICAgICAgICAgaWYgKCFzb3VyY2VEYXRhLmhhc093blByb3BlcnR5KHNyY1Byb3BLZXkpKSB7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3Qgc3JjUHJvcFZhbDogYW55ID0gc291cmNlRGF0YVtzcmNQcm9wS2V5XTtcclxuXHJcbiAgICAgICAgICAgIGlmIChDb21wbGV4RmllbGREZWNvcmF0b3IuSXNDb21wbGV4RmllbGQoZGVzdGluYXRpb25Nb2RlbCwgc3JjUHJvcEtleSkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNsYXNzT2ZGaWVsZDogYW55ID0gQ29tcGxleEZpZWxkRGVjb3JhdG9yLkdldENvbXBsZXhGaWVsZFR5cGUoZGVzdGluYXRpb25Nb2RlbCwgc3JjUHJvcEtleSk7XHJcbiAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbk1vZGVsW3NyY1Byb3BLZXldID0gdGhpcy5tYWtlV2l0aFJhd0JhY2tlbmREYXRhKGNsYXNzT2ZGaWVsZCwgc3JjUHJvcFZhbCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoQ29tcGxleEFycmF5RGVjb3JhdG9yLklzQ29tcGxleEFycmF5KGRlc3RpbmF0aW9uTW9kZWwsIHNyY1Byb3BLZXkpKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzb3VyY2VBcnJheTogYW55W10gPSBzcmNQcm9wVmFsO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFzb3VyY2VBcnJheSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY29uc3QgY2xhc3NPZkFycmF5SXRlbXM6IGFueSA9IENvbXBsZXhBcnJheURlY29yYXRvci5HZXRDb21wbGV4QXJyYXlUeXBlKGRlc3RpbmF0aW9uTW9kZWwsIHNyY1Byb3BLZXkpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdGVtcEFycmF5OiBhbnlbXSA9IFtdO1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaTogbnVtYmVyID0gMCwgbGVuOiBudW1iZXIgPSBzb3VyY2VBcnJheS5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRlbXBBcnJheS5wdXNoKHRoaXMubWFrZVdpdGhSYXdCYWNrZW5kRGF0YShjbGFzc09mQXJyYXlJdGVtcywgc291cmNlQXJyYXlbaV0pKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uTW9kZWxbc3JjUHJvcEtleV0gPSB0ZW1wQXJyYXk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoQm9vbGVhblRleHREZWNvcmF0b3IuSXNCb29sZWFuVGV4dEZpZWxkKGRlc3RpbmF0aW9uTW9kZWwsIHNyY1Byb3BLZXkpKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBsb2dpY2FsICd0cnVlJyBhbmQgJ2ZhbHNlJyBhbHNvIGFsbG93ZWQgYXMgaW5jb21pbmcgdmFsdWVzIGZvciBAQm9vbGVhblRleHQoKSBwcm9wZXJ0aWVzOiB0aGVuIGp1c3QgY29weSB0aGVpciB2YWx1ZVxyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBzcmNQcm9wVmFsID09PSBcImJvb2xlYW5cIikge1xyXG4gICAgICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uTW9kZWxbc3JjUHJvcEtleV0gPSBzcmNQcm9wVmFsO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGhlcmUsIGl0IHNob3VsZCBiZSBhICdKJyBvciAnTicgKG9yICdUJyBvciAnRicpOiBhc3NpZ24gdGhlIGFzc29jaWF0ZWQgYm9vbGVhbiB2YWx1ZVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbk1vZGVsW3NyY1Byb3BLZXldID0gQm9vbGVhblRleHREZWNvcmF0b3IuR2V0TG9naWNhbEJvb2xlYW5WYWx1ZShzcmNQcm9wVmFsKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIGlmIChEYXRlRmllbGRGaWVsZERlY29yYXRvci5Jc0RhdGVGaWVsZChkZXN0aW5hdGlvbk1vZGVsLCBzcmNQcm9wS2V5KSkge1xyXG4gICAgICAgICAgICAgICAgZGVzdGluYXRpb25Nb2RlbFtzcmNQcm9wS2V5XSA9IERhdGVGaWVsZEZpZWxkRGVjb3JhdG9yLlN0cmluZ0FzRGF0ZShzcmNQcm9wVmFsKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChTdHJpbmdOdW1iZXJEZWNvcmF0b3IuSXNTdHJpbmdOdW1iZXIoZGVzdGluYXRpb25Nb2RlbCwgc3JjUHJvcEtleSkpIHtcclxuICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uTW9kZWxbc3JjUHJvcEtleV0gPSBTdHJpbmdOdW1iZXJEZWNvcmF0b3IuU3RyaW5nQXNOdW1iZXIoc3JjUHJvcFZhbCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gbm9uLWRlY29yYXRlZCBwcm9wXHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzTmlsbChzcmNQcm9wVmFsKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uTW9kZWxbc3JjUHJvcEtleV0gPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoc3JjUHJvcFZhbCkpIHtcclxuICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbk1vZGVsW3NyY1Byb3BLZXldID0gQXJyYXlVdGlscy5DbG9uZUFycmF5KHNyY1Byb3BWYWwpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygc3JjUHJvcFZhbCA9PT0gXCJvYmplY3RcIikge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzcmNQcm9wVmFsIGluc3RhbmNlb2YgTWFwKSB7IC8vanVzdCBjb3B5IHRoZSB2YWx1ZSBpbiBjYXNlIG9mIG1hcHNcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGVzdGluYXRpb25Nb2RlbFtzcmNQcm9wS2V5XSA9IHNyY1Byb3BWYWw7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGVzdGluYXRpb25Nb2RlbFtzcmNQcm9wS2V5XSA9IE9iamVjdC5hc3NpZ24oe30sIHNyY1Byb3BWYWwpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVzdGluYXRpb25Nb2RlbFtzcmNQcm9wS2V5XSA9IHNyY1Byb3BWYWw7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIl19
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { GetYesNoDbBooleanValue } from "@colijnit/articleapi/build/enum/yes-no-db-type.enum";
|
|
2
|
+
import { GetTrueFalseDbBooleanValue } from "@colijnit/articleapi/build/enum/true-false-db-type.enum";
|
|
3
|
+
import { GetOneZeroDbBooleanValue } from "@colijnit/articleapi/build/enum/one-zero-bool-db-type.enum";
|
|
4
|
+
import { GetLogicalBooleanValue } from "@colijnit/articleapi/build/enum/db-boolean-value-type.enum";
|
|
5
|
+
const PROP_META_KEY_JN = "booleanTextJN";
|
|
6
|
+
const PROP_META_KEY_TF = "booleanTextTF";
|
|
7
|
+
const PROP_META_KEY_10 = "booleanText10";
|
|
8
|
+
/**
|
|
9
|
+
* There are 'J', 'T', 'N', 'F', 0 and 1 'boolean values' in the database. These should be translated to true and false boolean values in
|
|
10
|
+
* our client application.
|
|
11
|
+
*
|
|
12
|
+
* The values 'J' and 'N' seem to be most commonly used. This is the default setting when using this decorator.
|
|
13
|
+
* You can pass 'T' or 1 for the other variants as follows:
|
|
14
|
+
*
|
|
15
|
+
* Usage:
|
|
16
|
+
*
|
|
17
|
+
* @BooleanText() or @BooleanText("J") (the default, uses YesNoDbType char values)
|
|
18
|
+
* public foo: boolean // 'J' and 'N' become true and false after BusinessObjectFactoryService and -SerializerService processing
|
|
19
|
+
*
|
|
20
|
+
* @BooleanText('T') (uses TrueFalseDbType char values)
|
|
21
|
+
* public bar: boolean // 'T' and 'F' become true and false after BusinessObjectFactoryService and -SerializerService processing
|
|
22
|
+
*
|
|
23
|
+
* @BooleanText(1)
|
|
24
|
+
* public baz: boolean // 1 and 0 become true and false after BusinessObjectFactoryService and -SerializerService processing
|
|
25
|
+
*/
|
|
26
|
+
export function BooleanText(type) {
|
|
27
|
+
return function (target, propertyKey) {
|
|
28
|
+
if (!target || !propertyKey) {
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
// by default, it's a J N boolean text
|
|
32
|
+
if (!type || type === "J") {
|
|
33
|
+
Reflect.defineMetadata(PROP_META_KEY_JN, true, target, propertyKey);
|
|
34
|
+
}
|
|
35
|
+
else if (type === "T") {
|
|
36
|
+
Reflect.defineMetadata(PROP_META_KEY_TF, true, target, propertyKey);
|
|
37
|
+
}
|
|
38
|
+
else if (type === 1) {
|
|
39
|
+
Reflect.defineMetadata(PROP_META_KEY_10, true, target, propertyKey);
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
// Utility function holder of the BooleanTextDecorator decorator.
|
|
44
|
+
export class BooleanTextDecorator {
|
|
45
|
+
/**
|
|
46
|
+
* Returns whether given property (as a string) on given object is a boolean text field. That is, it's a field that is decorated
|
|
47
|
+
* with the @BooleanText decorator.
|
|
48
|
+
*/
|
|
49
|
+
static IsBooleanTextField(target, propertyKey) {
|
|
50
|
+
if (!target || !propertyKey || typeof target !== "object") {
|
|
51
|
+
return false;
|
|
52
|
+
}
|
|
53
|
+
return (Reflect.getMetadata(PROP_META_KEY_JN, target, propertyKey) === true
|
|
54
|
+
||
|
|
55
|
+
Reflect.getMetadata(PROP_META_KEY_TF, target, propertyKey) === true
|
|
56
|
+
||
|
|
57
|
+
Reflect.getMetadata(PROP_META_KEY_10, target, propertyKey) === true);
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Returns the logical true or false value of given character ('J', 'N', 'T' or 'F') or number (0 or 1).
|
|
61
|
+
* Returns UNDEFINED if given boolChar was not recognised as a boolean text.
|
|
62
|
+
*/
|
|
63
|
+
static GetLogicalBooleanValue(dbBoolChar) {
|
|
64
|
+
return GetLogicalBooleanValue(dbBoolChar);
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Returns the boolean character / number of given logical bool property on target object. Uses its @BooleanText() annotation to decide
|
|
68
|
+
* what character / number to return.
|
|
69
|
+
* Used in BusinessObjectSerializerServiceService to convert logical bools to their original boolean character.
|
|
70
|
+
* @returns {string|number} The original, reverse-engineered boolean character (or number) of given object property, or undefined.
|
|
71
|
+
*/
|
|
72
|
+
static GetDbBooleanValue(target, propertyKey) {
|
|
73
|
+
if (!target || !propertyKey || typeof target !== "object") {
|
|
74
|
+
return undefined;
|
|
75
|
+
}
|
|
76
|
+
let dbBoolVal = undefined;
|
|
77
|
+
const curBoolVal = target[propertyKey];
|
|
78
|
+
if (BooleanTextDecorator._IsJaNeeProp(target, propertyKey)) {
|
|
79
|
+
dbBoolVal = GetYesNoDbBooleanValue(curBoolVal);
|
|
80
|
+
}
|
|
81
|
+
else if (BooleanTextDecorator._IsTrueFalseProp(target, propertyKey)) {
|
|
82
|
+
dbBoolVal = GetTrueFalseDbBooleanValue(curBoolVal);
|
|
83
|
+
}
|
|
84
|
+
else if (BooleanTextDecorator._IsZeroOneProp(target, propertyKey)) {
|
|
85
|
+
dbBoolVal = GetOneZeroDbBooleanValue(curBoolVal);
|
|
86
|
+
}
|
|
87
|
+
return dbBoolVal;
|
|
88
|
+
}
|
|
89
|
+
static _IsJaNeeProp(target, propertyKey) {
|
|
90
|
+
return BooleanTextDecorator._IsProp(PROP_META_KEY_JN, target, propertyKey);
|
|
91
|
+
}
|
|
92
|
+
static _IsTrueFalseProp(target, propertyKey) {
|
|
93
|
+
return BooleanTextDecorator._IsProp(PROP_META_KEY_TF, target, propertyKey);
|
|
94
|
+
}
|
|
95
|
+
static _IsZeroOneProp(target, propertyKey) {
|
|
96
|
+
return BooleanTextDecorator._IsProp(PROP_META_KEY_10, target, propertyKey);
|
|
97
|
+
}
|
|
98
|
+
static _IsProp(prop, target, propertyKey) {
|
|
99
|
+
return !!target && !!propertyKey && typeof target === "object" && Reflect.hasMetadata(prop, target, propertyKey);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9vbGVhbi5kZWNvcmF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaGFyZWRjb21wb25lbnRzL3NyYy9saWIvZmFjdG9yeS9kZWNvcmF0b3JzL2Jvb2xlYW4uZGVjb3JhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxzQkFBc0IsRUFBQyxNQUFNLHFEQUFxRCxDQUFDO0FBQzNGLE9BQU8sRUFBQywwQkFBMEIsRUFBQyxNQUFNLHlEQUF5RCxDQUFDO0FBQ25HLE9BQU8sRUFBQyx3QkFBd0IsRUFBQyxNQUFNLDREQUE0RCxDQUFDO0FBQ3BHLE9BQU8sRUFBcUIsc0JBQXNCLEVBQUMsTUFBTSw0REFBNEQsQ0FBQztBQUV0SCxNQUFNLGdCQUFnQixHQUFXLGVBQWUsQ0FBQztBQUNqRCxNQUFNLGdCQUFnQixHQUFXLGVBQWUsQ0FBQztBQUNqRCxNQUFNLGdCQUFnQixHQUFXLGVBQWUsQ0FBQztBQUVqRDs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQkc7QUFDSCxNQUFNLFVBQVUsV0FBVyxDQUFDLElBQW9CO0lBQzVDLE9BQU8sVUFBVSxNQUFXLEVBQUUsV0FBbUI7UUFDN0MsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUN6QixPQUFPO1NBQ1Y7UUFDRCxzQ0FBc0M7UUFDdEMsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLEtBQUssR0FBRyxFQUFFO1lBQ3ZCLE9BQU8sQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxXQUFXLENBQUMsQ0FBQztTQUN2RTthQUFNLElBQUksSUFBSSxLQUFLLEdBQUcsRUFBRTtZQUNyQixPQUFPLENBQUMsY0FBYyxDQUFDLGdCQUFnQixFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsV0FBVyxDQUFDLENBQUM7U0FDdkU7YUFBTSxJQUFJLElBQUksS0FBSyxDQUFDLEVBQUU7WUFDbkIsT0FB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blZhbHVlfSBmcm9tIFwiQGNvbGlqbml0L2FydGljbGVhcGkvYnVpbGQvZW51bS95ZXMtbm8tZGItdHlwZS5lbnVtXCI7XHJcbmltcG9ydCB7R2V0VHJ1ZUZhbHNlRGJCb29sZWFuVmFsdWV9IGZyb20gXCJAY29saWpuaXQvYXJ0aWNsZWFwaS9idWlsZC9lbnVtL3RydWUtZmFsc2UtZGItdHlwZS5lbnVtXCI7XHJcbmltcG9ydCB7R2V0T25lWmVyb0RiQm9vbGVhblZhbHVlfSBmcm9tIFwiQGNvbGlqbml0L2FydGljbGVhcGkvYnVpbGQvZW51bS9vbmUtemVyby1ib29sLWRiLXR5cGUuZW51bVwiO1xyXG5pbXBvcnQge0RiQm9vbGVhblZhbHVlVHlwZSwgR2V0TG9naWNhbEJvb2xlYW5WYWx1ZX0gZnJvbSBcIkBjb2xpam5pdC9hcnRpY2xlYXBpL2J1aWxkL2VudW0vZGItYm9vbGVhbi12YWx1ZS10eXBlLmVudW1cIjtcclxuXHJcbmNvbnN0IFBST1BfTUVUQV9LRVlfSk46IHN0cmluZyA9IFwiYm9vbGVhblRleHRKTlwiO1xyXG5jb25zdCBQUk9QX01FVEFfS0VZX1RGOiBzdHJpbmcgPSBcImJvb2xlYW5UZXh0VEZcIjtcclxuY29uc3QgUFJPUF9NRVRBX0tFWV8xMDogc3RyaW5nID0gXCJib29sZWFuVGV4dDEwXCI7XHJcblxyXG4vKipcclxuICogVGhlcmUgYXJlICdKJywgJ1QnLCAnTicsICdGJywgMCBhbmQgMSAnYm9vbGVhbiB2YWx1ZXMnIGluIHRoZSBkYXRhYmFzZS4gVGhlc2Ugc2hvdWxkIGJlIHRyYW5zbGF0ZWQgdG8gdHJ1ZSBhbmQgZmFsc2UgYm9vbGVhbiB2YWx1ZXMgaW5cclxuICogb3VyIGNsaWVudCBhcHBsaWNhdGlvbi5cclxuICpcclxuICogVGhlIHZhbHVlcyAnSicgYW5kICdOJyBzZWVtIHRvIGJlIG1vc3QgY29tbW9ubHkgdXNlZC4gVGhpcyBpcyB0aGUgZGVmYXVsdCBzZXR0aW5nIHdoZW4gdXNpbmcgdGhpcyBkZWNvcmF0b3IuXHJcbiAqIFlvdSBjYW4gcGFzcyAnVCcgb3IgMSBmb3IgdGhlIG90aGVyIHZhcmlhbnRzIGFzIGZvbGxvd3M6XHJcbiAqXHJcbiAqIFVzYWdlOlxyXG4gKlxyXG4gKiBAQm9vbGVhblRleHQoKSBvciBAQm9vbGVhblRleHQoXCJKXCIpICh0aGUgZGVmYXVsdCwgdXNlcyBZZXNOb0RiVHlwZSBjaGFyIHZhbHVlcylcclxuICogcHVibGljIGZvbzogYm9vbGVhbiAvLyAnSicgYW5kICdOJyBiZWNvbWUgdHJ1ZSBhbmQgZmFsc2UgYWZ0ZXIgQnVzaW5lc3NPYmplY3RGYWN0b3J5U2VydmljZSBhbmQgLVNlcmlhbGl6ZXJTZXJ2aWNlIHByb2Nlc3NpbmdcclxuICpcclxuICogQEJvb2xlYW5UZXh0KCdUJykgKHVzZXMgVHJ1ZUZhbHNlRGJUeXBlIGNoYXIgdmFsdWVzKVxyXG4gKiBwdWJsaWMgYmFyOiBib29sZWFuIC8vICdUJyBhbmQgJ0YnIGJlY29tZSB0cnVlIGFuZCBmYWxzZSBhZnRlciBCdXNpbmVzc09iamVjdEZhY3RvcnlTZXJ2aWNlIGFuZCAtU2VyaWFsaXplclNlcnZpY2UgcHJvY2Vzc2luZ1xyXG4gKlxyXG4gKiBAQm9vbGVhblRleHQoMSlcclxuICogcHVibGljIGJhejogYm9vbGVhbiAvLyAxIGFuZCAwIGJlY29tZSB0cnVlIGFuZCBmYWxzZSBhZnRlciBCdXNpbmVzc09iamVjdEZhY3RvcnlTZXJ2aWNlIGFuZCAtU2VyaWFsaXplclNlcnZpY2UgcHJvY2Vzc2luZ1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIEJvb2xlYW5UZXh0KHR5cGU/OiBcIkpcIiB8IFwiVFwiIHwgMSk6IFByb3BlcnR5RGVjb3JhdG9yIHtcclxuICAgIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0OiBhbnksIHByb3BlcnR5S2V5OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIXRhcmdldCB8fCAhcHJvcGVydHlLZXkpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBieSBkZWZhdWx0LCBpdCdzIGEgSiBOIGJvb2xlYW4gdGV4dFxyXG4gICAgICAgIGlmICghdHlwZSB8fCB0eXBlID09PSBcIkpcIikge1xyXG4gICAgICAgICAgICBSZWZsZWN0LmRlZmluZU1ldGFkYXRhKFBST1BfTUVUQV9LRVlfSk4sIHRydWUsIHRhcmdldCwgcHJvcGVydHlLZXkpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gXCJUXCIpIHtcclxuICAgICAgICAgICAgUmVmbGVjdC5kZWZpbmVNZXRhZGF0YShQUk9QX01FVEFfS0VZX1RGLCB0cnVlLCB0YXJnZXQsIHByb3BlcnR5S2V5KTtcclxuICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IDEpIHtcclxuICAgICAgICAgICAgUmVmbGVjdC5kZWZpbmVNZXRhZGF0YShQUk9QX01FVEFfS0VZXzEwLCB0cnVlLCB0YXJnZXQsIHByb3BlcnR5S2V5KTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG59XHJcblxyXG4vLyBVdGlsaXR5IGZ1bmN0aW9uIGhvbGRlciBvZiB0aGUgQm9vbGVhblRleHREZWNvcmF0b3IgZGVjb3JhdG9yLlxyXG5leHBvcnQgY2xhc3MgQm9vbGVhblRleHREZWNvcmF0b3Ige1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB3aGV0aGVyIGdpdmVuIHByb3BlcnR5IChhcyBhIHN0cmluZykgb24gZ2l2ZW4gb2JqZWN0IGlzIGEgYm9vbGVhbiB0ZXh0IGZpZWxkLiBUaGF0IGlzLCBpdCdzIGEgZmllbGQgdGhhdCBpcyBkZWNvcmF0ZWRcclxuICAgICAqIHdpdGggdGhlIEBCb29sZWFuVGV4dCBkZWNvcmF0b3IuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzdGF0aWMgSXNCb29sZWFuVGV4dEZpZWxkKHRhcmdldDogT2JqZWN0LCBwcm9wZXJ0eUtleTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKCF0YXJnZXQgfHwgIXByb3BlcnR5S2V5IHx8IHR5cGVvZiB0YXJnZXQgIT09IFwib2JqZWN0XCIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICBSZWZsZWN0LmdldE1ldGFkYXRhKFBST1BfTUVUQV9LRVlfSk4sIHRhcmdldCwgcHJvcGVydHlLZXkpID09PSB0cnVlXHJcbiAgICAgICAgICAgIHx8XHJcbiAgICAgICAgICAgIFJlZmxlY3QuZ2V0TWV0YWRhdGEoUFJPUF9NRVRBX0tFWV9URiwgdGFyZ2V0LCBwcm9wZXJ0eUtleSkgPT09IHRydWVcclxuICAgICAgICAgICAgfHxcclxuICAgICAgICAgICAgUmVmbGVjdC5nZXRNZXRhZGF0YShQUk9QX01FVEFfS0VZXzEwLCB0YXJnZXQsIHByb3BlcnR5S2V5KSA9PT0gdHJ1ZVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSBsb2dpY2FsIHRydWUgb3IgZmFsc2UgdmFsdWUgb2YgZ2l2ZW4gY2hhcmFjdGVyICgnSicsICdOJywgJ1QnIG9yICdGJykgb3IgbnVtYmVyICgwIG9yIDEpLlxyXG4gICAgICogUmV0dXJucyBVTkRFRklORUQgaWYgZ2l2ZW4gYm9vbENoYXIgd2FzIG5vdCByZWNvZ25pc2VkIGFzIGEgYm9vbGVhbiB0ZXh0LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc3RhdGljIEdldExvZ2ljYWxCb29sZWFuVmFsdWUoZGJCb29sQ2hhcjogRGJCb29sZWFuVmFsdWVUeXBlIHwgc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIEdldExvZ2ljYWxCb29sZWFuVmFsdWUoZGJCb29sQ2hhcik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSBib29sZWFuIGNoYXJhY3RlciAvIG51bWJlciBvZiBnaXZlbiBsb2dpY2FsIGJvb2wgcHJvcGVydHkgb24gdGFyZ2V0IG9iamVjdC4gVXNlcyBpdHMgQEJvb2xlYW5UZXh0KCkgYW5ub3RhdGlvbiB0byBkZWNpZGVcclxuICAgICAqIHdoYXQgY2hhcmFjdGVyIC8gbnVtYmVyIHRvIHJldHVybi5cclxuICAgICAqIFVzZWQgaW4gQnVzaW5lc3NPYmplY3RTZXJpYWxpemVyU2VydmljZVNlcnZpY2UgdG8gY29udmVydCBsb2dpY2FsIGJvb2xzIHRvIHRoZWlyIG9yaWdpbmFsIGJvb2xlYW4gY2hhcmFjdGVyLlxyXG4gICAgICogQHJldHVybnMge3N0cmluZ3xudW1iZXJ9IFRoZSBvcmlnaW5hbCwgcmV2ZXJzZS1lbmdpbmVlcmVkIGJvb2xlYW4gY2hhcmFjdGVyIChvciBudW1iZXIpIG9mIGdpdmVuIG9iamVjdCBwcm9wZXJ0eSwgb3IgdW5kZWZpbmVkLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc3RhdGljIEdldERiQm9vbGVhblZhbHVlKHRhcmdldDogT2JqZWN0LCBwcm9wZXJ0eUtleTogc3RyaW5nKTogRGJCb29sZWFuVmFsdWVUeXBlIHtcclxuICAgICAgICBpZiAoIXRhcmdldCB8fCAhcHJvcGVydHlLZXkgfHwgdHlwZW9mIHRhcmdldCAhPT0gXCJvYmplY3RcIikge1xyXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IGRiQm9vbFZhbDogYW55ID0gdW5kZWZpbmVkO1xyXG5cclxuICAgICAgICBjb25zdCBjdXJCb29sVmFsOiBib29sZWFuID0gdGFyZ2V0W3Byb3BlcnR5S2V5XTtcclxuXHJcbiAgICAgICAgaWYgKEJvb2xlYW5UZXh0RGVjb3JhdG9yLl9Jc0phTmVlUHJvcCh0YXJnZXQsIHByb3BlcnR5S2V5KSkge1xyXG4gICAgICAgICAgICBkYkJvb2xWYWwgPSBHZXRZZXNOb0RiQm9vbGVhblZhbHVlKGN1ckJvb2xWYWwpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoQm9vbGVhblRleHREZWNvcmF0b3IuX0lzVHJ1ZUZhbHNlUHJvcCh0YXJnZXQsIHByb3BlcnR5S2V5KSkge1xyXG4gICAgICAgICAgICBkYkJvb2xWYWwgPSBHZXRUcnVlRmFsc2VEYkJvb2xlYW5WYWx1ZShjdXJCb29sVmFsKTtcclxuICAgICAgICB9IGVsc2UgaWYgKEJvb2xlYW5UZXh0RGVjb3JhdG9yLl9Jc1plcm9PbmVQcm9wKHRhcmdldCwgcHJvcGVydHlLZXkpKSB7XHJcbiAgICAgICAgICAgIGRiQm9vbFZhbCA9IEdldE9uZVplcm9EYkJvb2xlYW5WYWx1ZShjdXJCb29sVmFsKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBkYkJvb2xWYWwgYXMgYW55IGFzIERiQm9vbGVhblZhbHVlVHlwZTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHN0YXRpYyBfSXNKYU5lZVByb3AodGFyZ2V0OiBPYmplY3QsIHByb3BlcnR5S2V5OiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gQm9vbGVhblRleHREZWNvcmF0b3IuX0lzUHJvcChQUk9QX01FVEFfS0VZX0pOLCB0YXJnZXQsIHByb3BlcnR5S2V5KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHN0YXRpYyBfSXNUcnVlRmFsc2VQcm9wKHRhcmdldDogT2JqZWN0LCBwcm9wZXJ0eUtleTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIEJvb2xlYW5UZXh0RGVjb3JhdG9yLl9Jc1Byb3AoUFJPUF9NRVRBX0tFWV9URiwgdGFyZ2V0LCBwcm9wZXJ0eUtleSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzdGF0aWMgX0lzWmVyb09uZVByb3AodGFyZ2V0OiBPYmplY3QsIHByb3BlcnR5S2V5OiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gQm9vbGVhblRleHREZWNvcmF0b3IuX0lzUHJvcChQUk9QX01FVEFfS0VZXzEwLCB0YXJnZXQsIHByb3BlcnR5S2V5KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHN0YXRpYyBfSXNQcm9wKHByb3A6IHN0cmluZywgdGFyZ2V0OiBPYmplY3QsIHByb3BlcnR5S2V5OiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gISF0YXJnZXQgJiYgISFwcm9wZXJ0eUtleSAmJiB0eXBlb2YgdGFyZ2V0ID09PSBcIm9iamVjdFwiICYmIFJlZmxlY3QuaGFzTWV0YWRhdGEocHJvcCwgdGFyZ2V0LCBwcm9wZXJ0eUtleSk7XHJcbiAgICB9XHJcbn1cclxuIl19
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { notNill } from "@colijnit/articleapi/build/utils/function/not-nill.function";
|
|
2
|
+
import { ObjectUtils } from "@colijnit/articleapi/build/utils/object-utils";
|
|
3
|
+
const PROP_META_KEY = "complexArray";
|
|
4
|
+
/**
|
|
5
|
+
* !! just a TAG DECORATOR for now, there is no code that uses this meta data within the ione connector lib itself.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Property decorator for properties of businessobject classes that are an array of other strongly typed businessobjects.
|
|
9
|
+
* Ensures that the BusinessObjectFactoryService makes properly typed objects from incoming raw persistence data. Otherwise we couldn't add methods
|
|
10
|
+
* to our own businessobjects and use them, since all fields would be flat data without methods after BusinessObjectFactoryService creation.
|
|
11
|
+
*
|
|
12
|
+
* Usage:
|
|
13
|
+
*
|
|
14
|
+
* @ComplexArray(TransactionLine)
|
|
15
|
+
* public transactionLines: TransactionLine[]
|
|
16
|
+
*/
|
|
17
|
+
export function ComplexArray(type) {
|
|
18
|
+
return function (target, propertyKey) {
|
|
19
|
+
if (!target || !propertyKey || typeof target !== "object") {
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
// warn the programmer if given type was undefined; it's probably an import order glitch that caused this, because decorators seem
|
|
23
|
+
// to be immediately processed when a class is first imported
|
|
24
|
+
if (!type) {
|
|
25
|
+
console.warn(`@ComplexArray(type): type was UNDEFINED. Called on prop (${ObjectUtils.GetClassName(target)}, ${propertyKey}). ` +
|
|
26
|
+
`Class will not properly serialize and deserialize now. We've always been able to fix this by CHANGING IMPORT ORDERS ` +
|
|
27
|
+
`where both classes and their dependencies are used, e.g. factory, repository or models..`);
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
Reflect.defineMetadata(PROP_META_KEY, type, target, propertyKey);
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
// Utility function holder of the ComplexArrayDecorator decorator.
|
|
34
|
+
export class ComplexArrayDecorator {
|
|
35
|
+
/**
|
|
36
|
+
* Returns whether given property (as a string) on given object is a complex array. A complex array is an array field that is decorated
|
|
37
|
+
* with the @ComplexArray decorator.
|
|
38
|
+
*/
|
|
39
|
+
static IsComplexArray(target, propertyKey) {
|
|
40
|
+
if (!target || !propertyKey || typeof target !== "object") {
|
|
41
|
+
return false;
|
|
42
|
+
}
|
|
43
|
+
return (notNill(Reflect.getMetadata(PROP_META_KEY, target, propertyKey)));
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Returns the VALUE of the @ComplexArray(VALUE) property decorator on the given propertyKey on the given modelobject.
|
|
47
|
+
*/
|
|
48
|
+
static GetComplexArrayType(target, propertyKey) {
|
|
49
|
+
if (!target || !propertyKey || typeof target !== "object") {
|
|
50
|
+
return undefined;
|
|
51
|
+
}
|
|
52
|
+
return Reflect.getMetadata(PROP_META_KEY, target, propertyKey);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcGxleC1hcnJheS5kZWNvcmF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaGFyZWRjb21wb25lbnRzL3NyYy9saWIvZmFjdG9yeS9kZWNvcmF0b3JzL2NvbXBsZXgtYXJyYXkuZGVjb3JhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSw2REFBNkQsQ0FBQztBQUNwRixPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sK0NBQStDLENBQUM7QUFFMUUsTUFBTSxhQUFhLEdBQVcsY0FBYyxDQUFDO0FBRTdDOztHQUVHO0FBRUg7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBTSxVQUFVLFlBQVksQ0FBQyxJQUFTO0lBQ2xDLE9BQU8sVUFBVSxNQUFXLEVBQUUsV0FBbUI7UUFDN0MsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLFdBQVcsSUFBSSxPQUFPLE1BQU0sS0FBSyxRQUFRLEVBQUU7WUFDdkQsT0FBTztTQUNWO1FBQ0Qsa0lBQWtJO1FBQ2xJLDZEQUE2RDtRQUM3RCxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ1AsT0FBTyxDQUFDLElBQUksQ0FBQyw0REFBNEQsV0FBVyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsS0FBSyxXQUFXLEtBQUs7Z0JBQzFILHNIQUFzSDtnQkFDdEgsMEZBQTBGLENBQUMsQ0FBQztZQUNoRyxPQUFPO1NBQ1Y7UUFDRCxPQUFPLENBQUMsY0FBYyxDQUFDLGFBQWEsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQ3JFLENBQUMsQ0FBQztBQUNOLENBQUM7QUFFRCxrRUFBa0U7QUFDbEUsTUFBTSxPQUFPLHFCQUFxQjtJQUM5Qjs7O09BR0c7SUFDSSxNQUFNLENBQUMsY0FBYyxDQUFDLE1BQWMsRUFBRSxXQUFtQjtRQUM1RCxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsV0FBVyxJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVEsRUFBRTtZQUN2RCxPQUFPLEtBQUssQ0FBQztTQUNoQjtRQUVELE9BQU8sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxhQUFhLEVBQUUsTUFBTSxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5RSxDQUFDO0lBRUQ7O09BRUc7SUFDSSxNQUFNLENBQUMsbUJBQW1CLENBQUMsTUFBYyxFQUFFLFdBQW1CO1FBQ2pFLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxXQUFXLElBQUksT0FBTyxNQUFNLEtBQUssUUFBUSxFQUFFO1lBQ3ZELE9BQU8sU0FBUyxDQUFDO1NBQ3BCO1FBRUQsT0FBTyxPQUFPLENBQUMsV0FBVyxDQUFDLGFBQWEsRUFBRSxNQUFNLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDbkUsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtub3ROaWxsfSBmcm9tIFwiQGNvbGlqbml0L2FydGljbGVhcGkvYnVpbGQvdXRpbHMvZnVuY3Rpb24vbm90LW5pbGwuZnVuY3Rpb25cIjtcclxuaW1wb3J0IHtPYmplY3RVdGlsc30gZnJvbSBcIkBjb2xpam5pdC9hcnRpY2xlYXBpL2J1aWxkL3V0aWxzL29iamVjdC11dGlsc1wiO1xyXG5cclxuY29uc3QgUFJPUF9NRVRBX0tFWTogc3RyaW5nID0gXCJjb21wbGV4QXJyYXlcIjtcclxuXHJcbi8qKlxyXG4gKiAhISBqdXN0IGEgVEFHIERFQ09SQVRPUiBmb3Igbm93LCB0aGVyZSBpcyBubyBjb2RlIHRoYXQgdXNlcyB0aGlzIG1ldGEgZGF0YSB3aXRoaW4gdGhlIGlvbmUgY29ubmVjdG9yIGxpYiBpdHNlbGYuXHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFByb3BlcnR5IGRlY29yYXRvciBmb3IgcHJvcGVydGllcyBvZiBidXNpbmVzc29iamVjdCBjbGFzc2VzIHRoYXQgYXJlIGFuIGFycmF5IG9mIG90aGVyIHN0cm9uZ2x5IHR5cGVkIGJ1c2luZXNzb2JqZWN0cy5cclxuICogRW5zdXJlcyB0aGF0IHRoZSBCdXNpbmVzc09iamVjdEZhY3RvcnlTZXJ2aWNlIG1ha2VzIHByb3Blcmx5IHR5cGVkIG9iamVjdHMgZnJvbSBpbmNvbWluZyByYXcgcGVyc2lzdGVuY2UgZGF0YS4gT3RoZXJ3aXNlIHdlIGNvdWxkbid0IGFkZCBtZXRob2RzXHJcbiAqIHRvIG91ciBvd24gYnVzaW5lc3NvYmplY3RzIGFuZCB1c2UgdGhlbSwgc2luY2UgYWxsIGZpZWxkcyB3b3VsZCBiZSBmbGF0IGRhdGEgd2l0aG91dCBtZXRob2RzIGFmdGVyIEJ1c2luZXNzT2JqZWN0RmFjdG9yeVNlcnZpY2UgY3JlYXRpb24uXHJcbiAqXHJcbiAqIFVzYWdlOlxyXG4gKlxyXG4gKiBAQ29tcGxleEFycmF5KFRyYW5zYWN0aW9uTGluZSlcclxuICogcHVibGljIHRyYW5zYWN0aW9uTGluZXM6IFRyYW5zYWN0aW9uTGluZVtdXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gQ29tcGxleEFycmF5KHR5cGU6IGFueSk6IFByb3BlcnR5RGVjb3JhdG9yIHtcclxuICAgIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0OiBhbnksIHByb3BlcnR5S2V5OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIXRhcmdldCB8fCAhcHJvcGVydHlLZXkgfHwgdHlwZW9mIHRhcmdldCAhPT0gXCJvYmplY3RcIikge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIHdhcm4gdGhlIHByb2dyYW1tZXIgaWYgZ2l2ZW4gdHlwZSB3YXMgdW5kZWZpbmVkOyBpdCdzIHByb2JhYmx5IGFuIGltcG9ydCBvcmRlciBnbGl0Y2ggdGhhdCBjYXVzZWQgdGhpcywgYmVjYXVzZSBkZWNvcmF0b3JzIHNlZW1cclxuICAgICAgICAvLyB0byBiZSBpbW1lZGlhdGVseSBwcm9jZXNzZWQgd2hlbiBhIGNsYXNzIGlzIGZpcnN0IGltcG9ydGVkXHJcbiAgICAgICAgaWYgKCF0eXBlKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihgQENvbXBsZXhBcnJheSh0eXBlKTogdHlwZSB3YXMgVU5ERUZJTkVELiBDYWxsZWQgb24gcHJvcCAoJHtPYmplY3RVdGlscy5HZXRDbGFzc05hbWUodGFyZ2V0KX0sICR7cHJvcGVydHlLZXl9KS4gYCArXHJcbiAgICAgICAgICAgICAgICBgQ2xhc3Mgd2lsbCBub3QgcHJvcGVybHkgc2VyaWFsaXplIGFuZCBkZXNlcmlhbGl6ZSBub3cuIFdlJ3ZlIGFsd2F5cyBiZWVuIGFibGUgdG8gZml4IHRoaXMgYnkgQ0hBTkdJTkcgSU1QT1JUIE9SREVSUyBgICtcclxuICAgICAgICAgICAgICAgIGB3aGVyZSBib3RoIGNsYXNzZXMgYW5kIHRoZWlyIGRlcGVuZGVuY2llcyBhcmUgdXNlZCwgZS5nLiBmYWN0b3J5LCByZXBvc2l0b3J5IG9yIG1vZGVscy4uYCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgUmVmbGVjdC5kZWZpbmVNZXRhZGF0YShQUk9QX01FVEFfS0VZLCB0eXBlLCB0YXJnZXQsIHByb3BlcnR5S2V5KTtcclxuICAgIH07XHJcbn1cclxuXHJcbi8vIFV0aWxpdHkgZnVuY3Rpb24gaG9sZGVyIG9mIHRoZSBDb21wbGV4QXJyYXlEZWNvcmF0b3IgZGVjb3JhdG9yLlxyXG5leHBvcnQgY2xhc3MgQ29tcGxleEFycmF5RGVjb3JhdG9yIHtcclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB3aGV0aGVyIGdpdmVuIHByb3BlcnR5IChhcyBhIHN0cmluZykgb24gZ2l2ZW4gb2JqZWN0IGlzIGEgY29tcGxleCBhcnJheS4gQSBjb21wbGV4IGFycmF5IGlzIGFuIGFycmF5IGZpZWxkIHRoYXQgaXMgZGVjb3JhdGVkXHJcbiAgICAgKiB3aXRoIHRoZSBAQ29tcGxleEFycmF5IGRlY29yYXRvci5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHN0YXRpYyBJc0NvbXBsZXhBcnJheSh0YXJnZXQ6IE9iamVjdCwgcHJvcGVydHlLZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICghdGFyZ2V0IHx8ICFwcm9wZXJ0eUtleSB8fCB0eXBlb2YgdGFyZ2V0ICE9PSBcIm9iamVjdFwiKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiAobm90TmlsbChSZWZsZWN0LmdldE1ldGFkYXRhKFBST1BfTUVUQV9LRVksIHRhcmdldCwgcHJvcGVydHlLZXkpKSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSBWQUxVRSBvZiB0aGUgQENvbXBsZXhBcnJheShWQUxVRSkgcHJvcGVydHkgZGVjb3JhdG9yIG9uIHRoZSBnaXZlbiBwcm9wZXJ0eUtleSBvbiB0aGUgZ2l2ZW4gbW9kZWxvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzdGF0aWMgR2V0Q29tcGxleEFycmF5VHlwZSh0YXJnZXQ6IE9iamVjdCwgcHJvcGVydHlLZXk6IHN0cmluZyk6IGFueSB7XHJcbiAgICAgICAgaWYgKCF0YXJnZXQgfHwgIXByb3BlcnR5S2V5IHx8IHR5cGVvZiB0YXJnZXQgIT09IFwib2JqZWN0XCIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBSZWZsZWN0LmdldE1ldGFkYXRhKFBST1BfTUVUQV9LRVksIHRhcmdldCwgcHJvcGVydHlLZXkpO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { notNill } from "@colijnit/articleapi/build/utils/function/not-nill.function";
|
|
2
|
+
import { ObjectUtils } from "@colijnit/articleapi/build/utils/object-utils";
|
|
3
|
+
const PROP_META_KEY = "complexField";
|
|
4
|
+
/**
|
|
5
|
+
* !! just a TAG DECORATOR for now, there is no code that uses this meta data within the ione connector lib itself.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Property decorator for properties of businessobject classes that are other strongly typed businessobjects.
|
|
9
|
+
* Ensures that the BusinessObjectFactoryService makes properly typed objects from incoming raw persistence data. Otherwise we couldn't add methods
|
|
10
|
+
* to our own businessobjects and use them, since all fields would be flat data without methods after BusinessObjectFactoryService creation.
|
|
11
|
+
*
|
|
12
|
+
* Usage:
|
|
13
|
+
*
|
|
14
|
+
* @ComplexField(Transaction)
|
|
15
|
+
* public transaction: Transaction
|
|
16
|
+
*
|
|
17
|
+
* Also keeps track of a "complexFieldProps" metadata on the class-level, as a reflect-metadata workaround to be able to
|
|
18
|
+
* retrieve all properties that have the @ComplexField(..) decorator (impossible with current Reflect API).
|
|
19
|
+
*/
|
|
20
|
+
export function ComplexField(type) {
|
|
21
|
+
return function (target, propertyKey) {
|
|
22
|
+
if (!target || !propertyKey) {
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
// warn the programmer if given type was undefined; it's probably an import order glitch that caused this, because decorators seem
|
|
26
|
+
// to be immediately processed when a class is first imported
|
|
27
|
+
if (!type) {
|
|
28
|
+
// eslint-disable-next-line no-console
|
|
29
|
+
console.warn(`@ComplexField(type): type was UNDEFINED. Called on prop (${ObjectUtils.GetClassName(target)}, ${propertyKey}). ` +
|
|
30
|
+
`Class will not properly serialize and deserialize now. We've always been able to fix this by CHANGING IMPORT ORDERS ` +
|
|
31
|
+
`where both classes and their dependencies are used, e.g. factory, repository or models..`);
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
Reflect.defineMetadata(PROP_META_KEY, type, target, propertyKey);
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
// Utility function holder of the ComplexFieldDecorator decorator.
|
|
38
|
+
export class ComplexFieldDecorator {
|
|
39
|
+
/**
|
|
40
|
+
* Returns whether given property (as a string) on given object is a complex field. A complex field is a field that is decorated
|
|
41
|
+
* with the @ComplexField decorator.
|
|
42
|
+
*/
|
|
43
|
+
static IsComplexField(target, propertyKey) {
|
|
44
|
+
if (!target || !propertyKey || typeof target !== "object") {
|
|
45
|
+
return false;
|
|
46
|
+
}
|
|
47
|
+
return (notNill(Reflect.getMetadata(PROP_META_KEY, target, propertyKey)));
|
|
48
|
+
}
|
|
49
|
+
// Returns the VALUE of the @ComplexField(VALUE) property decorator on the given propertyKey on the given modelObject.
|
|
50
|
+
static GetComplexFieldType(target, propertyKey) {
|
|
51
|
+
if (!target || !propertyKey || typeof target !== "object") {
|
|
52
|
+
return undefined;
|
|
53
|
+
}
|
|
54
|
+
return Reflect.getMetadata(PROP_META_KEY, target, propertyKey);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcGxleC1maWVsZC5kZWNvcmF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaGFyZWRjb21wb25lbnRzL3NyYy9saWIvZmFjdG9yeS9kZWNvcmF0b3JzL2NvbXBsZXgtZmllbGQuZGVjb3JhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSw2REFBNkQsQ0FBQztBQUNwRixPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sK0NBQStDLENBQUM7QUFFMUUsTUFBTSxhQUFhLEdBQVcsY0FBYyxDQUFDO0FBRTdDOztHQUVHO0FBRUg7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsTUFBTSxVQUFVLFlBQVksQ0FBQyxJQUFTO0lBQ2xDLE9BQU8sVUFBVSxNQUFXLEVBQUUsV0FBbUI7UUFDN0MsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUN6QixPQUFPO1NBQ1Y7UUFFRCxrSUFBa0k7UUFDbEksNkRBQTZEO1FBQzdELElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDVCxzQ0FBc0M7WUFDcEMsT0FBTyxDQUFDLElBQUksQ0FBQyw0REFBNEQsV0FBVyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsS0FBSyxXQUFXLEtBQUs7Z0JBQzFILHNIQUFzSDtnQkFDdEgsMEZBQTBGLENBQUMsQ0FBQztZQUNoRyxPQUFPO1NBQ1Y7UUFDRCxPQUFPLENBQUMsY0FBYyxDQUFDLGFBQWEsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQ3JFLENBQUMsQ0FBQztBQUNOLENBQUM7QUFFRCxrRUFBa0U7QUFDbEUsTUFBTSxPQUFPLHFCQUFxQjtJQUU5Qjs7O09BR0c7SUFDSSxNQUFNLENBQUMsY0FBYyxDQUFDLE1BQWMsRUFBRSxXQUFtQjtRQUM1RCxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsV0FBVyxJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVEsRUFBRTtZQUN2RCxPQUFPLEtBQUssQ0FBQztTQUNoQjtRQUNELE9BQU8sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxhQUFhLEVBQUUsTUFBTSxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5RSxDQUFDO0lBRUQsc0hBQXNIO0lBQy9HLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxNQUFjLEVBQUUsV0FBbUI7UUFDakUsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLFdBQVcsSUFBSSxPQUFPLE1BQU0sS0FBSyxRQUFRLEVBQUU7WUFDdkQsT0FBTyxTQUFTLENBQUM7U0FDcEI7UUFDRCxPQUFPLE9BQU8sQ0FBQyxXQUFXLENBQUMsYUFBYSxFQUFFLE1BQU0sRUFBRSxXQUFXLENBQUMsQ0FBQztJQUNuRSxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge25vdE5pbGx9IGZyb20gXCJAY29saWpuaXQvYXJ0aWNsZWFwaS9idWlsZC91dGlscy9mdW5jdGlvbi9ub3QtbmlsbC5mdW5jdGlvblwiO1xyXG5pbXBvcnQge09iamVjdFV0aWxzfSBmcm9tIFwiQGNvbGlqbml0L2FydGljbGVhcGkvYnVpbGQvdXRpbHMvb2JqZWN0LXV0aWxzXCI7XHJcblxyXG5jb25zdCBQUk9QX01FVEFfS0VZOiBzdHJpbmcgPSBcImNvbXBsZXhGaWVsZFwiO1xyXG5cclxuLyoqXHJcbiAqICEhIGp1c3QgYSBUQUcgREVDT1JBVE9SIGZvciBub3csIHRoZXJlIGlzIG5vIGNvZGUgdGhhdCB1c2VzIHRoaXMgbWV0YSBkYXRhIHdpdGhpbiB0aGUgaW9uZSBjb25uZWN0b3IgbGliIGl0c2VsZi5cclxuICovXHJcblxyXG4vKipcclxuICogUHJvcGVydHkgZGVjb3JhdG9yIGZvciBwcm9wZXJ0aWVzIG9mIGJ1c2luZXNzb2JqZWN0IGNsYXNzZXMgdGhhdCBhcmUgb3RoZXIgc3Ryb25nbHkgdHlwZWQgYnVzaW5lc3NvYmplY3RzLlxyXG4gKiBFbnN1cmVzIHRoYXQgdGhlIEJ1c2luZXNzT2JqZWN0RmFjdG9yeVNlcnZpY2UgbWFrZXMgcHJvcGVybHkgdHlwZWQgb2JqZWN0cyBmcm9tIGluY29taW5nIHJhdyBwZXJzaXN0ZW5jZSBkYXRhLiBPdGhlcndpc2Ugd2UgY291bGRuJ3QgYWRkIG1ldGhvZHNcclxuICogdG8gb3VyIG93biBidXNpbmVzc29iamVjdHMgYW5kIHVzZSB0aGVtLCBzaW5jZSBhbGwgZmllbGRzIHdvdWxkIGJlIGZsYXQgZGF0YSB3aXRob3V0IG1ldGhvZHMgYWZ0ZXIgQnVzaW5lc3NPYmplY3RGYWN0b3J5U2VydmljZSBjcmVhdGlvbi5cclxuICpcclxuICogVXNhZ2U6XHJcbiAqXHJcbiAqIEBDb21wbGV4RmllbGQoVHJhbnNhY3Rpb24pXHJcbiAqIHB1YmxpYyB0cmFuc2FjdGlvbjogVHJhbnNhY3Rpb25cclxuICpcclxuICogQWxzbyBrZWVwcyB0cmFjayBvZiBhIFwiY29tcGxleEZpZWxkUHJvcHNcIiBtZXRhZGF0YSBvbiB0aGUgY2xhc3MtbGV2ZWwsIGFzIGEgcmVmbGVjdC1tZXRhZGF0YSB3b3JrYXJvdW5kIHRvIGJlIGFibGUgdG9cclxuICogcmV0cmlldmUgYWxsIHByb3BlcnRpZXMgdGhhdCBoYXZlIHRoZSBAQ29tcGxleEZpZWxkKC4uKSBkZWNvcmF0b3IgKGltcG9zc2libGUgd2l0aCBjdXJyZW50IFJlZmxlY3QgQVBJKS5cclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBDb21wbGV4RmllbGQodHlwZTogYW55KTogUHJvcGVydHlEZWNvcmF0b3Ige1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQ6IGFueSwgcHJvcGVydHlLZXk6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIGlmICghdGFyZ2V0IHx8ICFwcm9wZXJ0eUtleSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyB3YXJuIHRoZSBwcm9ncmFtbWVyIGlmIGdpdmVuIHR5cGUgd2FzIHVuZGVmaW5lZDsgaXQncyBwcm9iYWJseSBhbiBpbXBvcnQgb3JkZXIgZ2xpdGNoIHRoYXQgY2F1c2VkIHRoaXMsIGJlY2F1c2UgZGVjb3JhdG9ycyBzZWVtXHJcbiAgICAgICAgLy8gdG8gYmUgaW1tZWRpYXRlbHkgcHJvY2Vzc2VkIHdoZW4gYSBjbGFzcyBpcyBmaXJzdCBpbXBvcnRlZFxyXG4gICAgICAgIGlmICghdHlwZSkge1xyXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcclxuICAgICAgICAgICAgY29uc29sZS53YXJuKGBAQ29tcGxleEZpZWxkKHR5cGUpOiB0eXBlIHdhcyBVTkRFRklORUQuIENhbGxlZCBvbiBwcm9wICgke09iamVjdFV0aWxzLkdldENsYXNzTmFtZSh0YXJnZXQpfSwgJHtwcm9wZXJ0eUtleX0pLiBgICtcclxuICAgICAgICAgICAgICAgIGBDbGFzcyB3aWxsIG5vdCBwcm9wZXJseSBzZXJpYWxpemUgYW5kIGRlc2VyaWFsaXplIG5vdy4gV2UndmUgYWx3YXlzIGJlZW4gYWJsZSB0byBmaXggdGhpcyBieSBDSEFOR0lORyBJTVBPUlQgT1JERVJTIGAgK1xyXG4gICAgICAgICAgICAgICAgYHdoZXJlIGJvdGggY2xhc3NlcyBhbmQgdGhlaXIgZGVwZW5kZW5jaWVzIGFyZSB1c2VkLCBlLmcuIGZhY3RvcnksIHJlcG9zaXRvcnkgb3IgbW9kZWxzLi5gKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBSZWZsZWN0LmRlZmluZU1ldGFkYXRhKFBST1BfTUVUQV9LRVksIHR5cGUsIHRhcmdldCwgcHJvcGVydHlLZXkpO1xyXG4gICAgfTtcclxufVxyXG5cclxuLy8gVXRpbGl0eSBmdW5jdGlvbiBob2xkZXIgb2YgdGhlIENvbXBsZXhGaWVsZERlY29yYXRvciBkZWNvcmF0b3IuXHJcbmV4cG9ydCBjbGFzcyBDb21wbGV4RmllbGREZWNvcmF0b3Ige1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB3aGV0aGVyIGdpdmVuIHByb3BlcnR5IChhcyBhIHN0cmluZykgb24gZ2l2ZW4gb2JqZWN0IGlzIGEgY29tcGxleCBmaWVsZC4gQSBjb21wbGV4IGZpZWxkIGlzIGEgZmllbGQgdGhhdCBpcyBkZWNvcmF0ZWRcclxuICAgICAqIHdpdGggdGhlIEBDb21wbGV4RmllbGQgZGVjb3JhdG9yLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc3RhdGljIElzQ29tcGxleEZpZWxkKHRhcmdldDogT2JqZWN0LCBwcm9wZXJ0eUtleTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKCF0YXJnZXQgfHwgIXByb3BlcnR5S2V5IHx8IHR5cGVvZiB0YXJnZXQgIT09IFwib2JqZWN0XCIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gKG5vdE5pbGwoUmVmbGVjdC5nZXRNZXRhZGF0YShQUk9QX01FVEFfS0VZLCB0YXJnZXQsIHByb3BlcnR5S2V5KSkpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFJldHVybnMgdGhlIFZBTFVFIG9mIHRoZSBAQ29tcGxleEZpZWxkKFZBTFVFKSBwcm9wZXJ0eSBkZWNvcmF0b3Igb24gdGhlIGdpdmVuIHByb3BlcnR5S2V5IG9uIHRoZSBnaXZlbiBtb2RlbE9iamVjdC5cclxuICAgIHB1YmxpYyBzdGF0aWMgR2V0Q29tcGxleEZpZWxkVHlwZSh0YXJnZXQ6IE9iamVjdCwgcHJvcGVydHlLZXk6IHN0cmluZyk6IGFueSB7XHJcbiAgICAgICAgaWYgKCF0YXJnZXQgfHwgIXByb3BlcnR5S2V5IHx8IHR5cGVvZiB0YXJnZXQgIT09IFwib2JqZWN0XCIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIFJlZmxlY3QuZ2V0TWV0YWRhdGEoUFJPUF9NRVRBX0tFWSwgdGFyZ2V0LCBwcm9wZXJ0eUtleSk7XHJcbiAgICB9XHJcbn1cclxuIl19
|