@barchart/portfolio-api-common 1.0.189 → 1.0.193
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.
|
@@ -5,6 +5,7 @@ const array = require('@barchart/common-js/lang/array'),
|
|
|
5
5
|
Currency = require('@barchart/common-js/lang/Currency'),
|
|
6
6
|
Decimal = require('@barchart/common-js/lang/Decimal'),
|
|
7
7
|
DisposableStack = require('@barchart/common-js/collections/specialized/DisposableStack'),
|
|
8
|
+
Event = require('@barchart/common-js/messaging/Event'),
|
|
8
9
|
is = require('@barchart/common-js/lang/is'),
|
|
9
10
|
Rate = require('@barchart/common-js/lang/Rate'),
|
|
10
11
|
Tree = require('@barchart/common-js/collections/Tree');
|
|
@@ -48,6 +49,9 @@ module.exports = (() => {
|
|
|
48
49
|
|
|
49
50
|
this._groupBindings = { };
|
|
50
51
|
|
|
52
|
+
this._positionSymbolAddedEvent = new Event(this);
|
|
53
|
+
this._positionSymbolRemovedEvent = new Event(this);
|
|
54
|
+
|
|
51
55
|
this._portfolios = portfolios.reduce((map, portfolio) => {
|
|
52
56
|
map[portfolio.portfolio] = portfolio;
|
|
53
57
|
|
|
@@ -241,7 +245,9 @@ module.exports = (() => {
|
|
|
241
245
|
}
|
|
242
246
|
|
|
243
247
|
this.startTransaction(() => {
|
|
244
|
-
this.
|
|
248
|
+
const existingBarchartSymbols = this.getPositionSymbols(false);
|
|
249
|
+
|
|
250
|
+
removePositionItem.call(this, this._items.find((item) => item.position.position === position.position));
|
|
245
251
|
|
|
246
252
|
summaries.forEach((summary) => {
|
|
247
253
|
addSummaryCurrent(this._summariesCurrent, summary, this._currentSummaryFrame, this._currentSummaryRange);
|
|
@@ -256,6 +262,10 @@ module.exports = (() => {
|
|
|
256
262
|
this._items.push(item);
|
|
257
263
|
|
|
258
264
|
const createGroupOrInjectItem = (parentTree, treeDefinition, levelDefinitions) => {
|
|
265
|
+
if (levelDefinitions.length === 0) {
|
|
266
|
+
return;
|
|
267
|
+
}
|
|
268
|
+
|
|
259
269
|
const levelDefinition = levelDefinitions[0];
|
|
260
270
|
const levelKey = levelDefinition.keySelector(item);
|
|
261
271
|
|
|
@@ -277,6 +287,12 @@ module.exports = (() => {
|
|
|
277
287
|
};
|
|
278
288
|
|
|
279
289
|
this._definitions.forEach(definition => createGroupOrInjectItem(this._trees[definition.name], definition, definition.definitions));
|
|
290
|
+
|
|
291
|
+
const addedBarchartSymbol = extractSymbolForBarchart(item.position);
|
|
292
|
+
|
|
293
|
+
if (!existingBarchartSymbols.some(existingBarchartSymbol => existingBarchartSymbol === addedBarchartSymbol)) {
|
|
294
|
+
this._positionSymbolAddedEvent.fire(addedBarchartSymbol);
|
|
295
|
+
}
|
|
280
296
|
});
|
|
281
297
|
}
|
|
282
298
|
|
|
@@ -486,7 +502,10 @@ module.exports = (() => {
|
|
|
486
502
|
getPositions(portfolio) {
|
|
487
503
|
assert.argumentIsRequired(portfolio, 'portfolio', String);
|
|
488
504
|
|
|
489
|
-
return getPositionItemsForPortfolio(this._items, portfolio)
|
|
505
|
+
return getPositionItemsForPortfolio(this._items, portfolio)
|
|
506
|
+
.map((item) => {
|
|
507
|
+
return item.position;
|
|
508
|
+
});
|
|
490
509
|
}
|
|
491
510
|
|
|
492
511
|
/**
|
|
@@ -522,6 +541,31 @@ module.exports = (() => {
|
|
|
522
541
|
namesToUse.forEach((name) => this._trees[name].walk(group => group.setSuspended(false), false, false));
|
|
523
542
|
}
|
|
524
543
|
|
|
544
|
+
/**
|
|
545
|
+
* Registers an observer for symbol addition (this occurs when a new position is added
|
|
546
|
+
* for a symbol that does not already exist in the container). This event only fires
|
|
547
|
+
* after the constructor completes (and initial positions have been added).
|
|
548
|
+
*
|
|
549
|
+
* @public
|
|
550
|
+
* @param {Function} handler
|
|
551
|
+
* @returns {Disposable}
|
|
552
|
+
*/
|
|
553
|
+
registerPositionSymbolAddedHandler(handler) {
|
|
554
|
+
return this._positionSymbolAddedEvent.register(handler);
|
|
555
|
+
}
|
|
556
|
+
|
|
557
|
+
/**
|
|
558
|
+
* Registers an observer for symbol removal (this occurs when the last position for a
|
|
559
|
+
* symbol is removed from the container).
|
|
560
|
+
*
|
|
561
|
+
* @public
|
|
562
|
+
* @param {Function} handler
|
|
563
|
+
* @returns {Disposable}
|
|
564
|
+
*/
|
|
565
|
+
registerPositionSymbolAddedHandler(handler) {
|
|
566
|
+
return this._positionSymbolRemovedEvent.register(handler);
|
|
567
|
+
}
|
|
568
|
+
|
|
525
569
|
toString() {
|
|
526
570
|
return '[PositionContainer]';
|
|
527
571
|
}
|
|
@@ -691,7 +735,7 @@ module.exports = (() => {
|
|
|
691
735
|
function getPositionItemsForPortfolio(items, portfolio) {
|
|
692
736
|
return items.reduce((positionItems, item) => {
|
|
693
737
|
if (item.position.portfolio === portfolio) {
|
|
694
|
-
positionItems.push(item
|
|
738
|
+
positionItems.push(item);
|
|
695
739
|
}
|
|
696
740
|
|
|
697
741
|
return positionItems;
|
package/package.json
CHANGED
package/test/SpecRunner.js
CHANGED
|
@@ -721,6 +721,7 @@ const array = require('@barchart/common-js/lang/array'),
|
|
|
721
721
|
Currency = require('@barchart/common-js/lang/Currency'),
|
|
722
722
|
Decimal = require('@barchart/common-js/lang/Decimal'),
|
|
723
723
|
DisposableStack = require('@barchart/common-js/collections/specialized/DisposableStack'),
|
|
724
|
+
Event = require('@barchart/common-js/messaging/Event'),
|
|
724
725
|
is = require('@barchart/common-js/lang/is'),
|
|
725
726
|
Rate = require('@barchart/common-js/lang/Rate'),
|
|
726
727
|
Tree = require('@barchart/common-js/collections/Tree');
|
|
@@ -764,6 +765,9 @@ module.exports = (() => {
|
|
|
764
765
|
|
|
765
766
|
this._groupBindings = { };
|
|
766
767
|
|
|
768
|
+
this._positionSymbolAddedEvent = new Event(this);
|
|
769
|
+
this._positionSymbolRemovedEvent = new Event(this);
|
|
770
|
+
|
|
767
771
|
this._portfolios = portfolios.reduce((map, portfolio) => {
|
|
768
772
|
map[portfolio.portfolio] = portfolio;
|
|
769
773
|
|
|
@@ -957,7 +961,9 @@ module.exports = (() => {
|
|
|
957
961
|
}
|
|
958
962
|
|
|
959
963
|
this.startTransaction(() => {
|
|
960
|
-
this.
|
|
964
|
+
const existingBarchartSymbols = this.getPositionSymbols(false);
|
|
965
|
+
|
|
966
|
+
removePositionItem.call(this, this._items.find((item) => item.position.position === position.position));
|
|
961
967
|
|
|
962
968
|
summaries.forEach((summary) => {
|
|
963
969
|
addSummaryCurrent(this._summariesCurrent, summary, this._currentSummaryFrame, this._currentSummaryRange);
|
|
@@ -972,6 +978,10 @@ module.exports = (() => {
|
|
|
972
978
|
this._items.push(item);
|
|
973
979
|
|
|
974
980
|
const createGroupOrInjectItem = (parentTree, treeDefinition, levelDefinitions) => {
|
|
981
|
+
if (levelDefinitions.length === 0) {
|
|
982
|
+
return;
|
|
983
|
+
}
|
|
984
|
+
|
|
975
985
|
const levelDefinition = levelDefinitions[0];
|
|
976
986
|
const levelKey = levelDefinition.keySelector(item);
|
|
977
987
|
|
|
@@ -993,6 +1003,12 @@ module.exports = (() => {
|
|
|
993
1003
|
};
|
|
994
1004
|
|
|
995
1005
|
this._definitions.forEach(definition => createGroupOrInjectItem(this._trees[definition.name], definition, definition.definitions));
|
|
1006
|
+
|
|
1007
|
+
const addedBarchartSymbol = extractSymbolForBarchart(item.position);
|
|
1008
|
+
|
|
1009
|
+
if (!existingBarchartSymbols.some(existingBarchartSymbol => existingBarchartSymbol === addedBarchartSymbol)) {
|
|
1010
|
+
this._positionSymbolAddedEvent.fire(addedBarchartSymbol);
|
|
1011
|
+
}
|
|
996
1012
|
});
|
|
997
1013
|
}
|
|
998
1014
|
|
|
@@ -1202,7 +1218,10 @@ module.exports = (() => {
|
|
|
1202
1218
|
getPositions(portfolio) {
|
|
1203
1219
|
assert.argumentIsRequired(portfolio, 'portfolio', String);
|
|
1204
1220
|
|
|
1205
|
-
return getPositionItemsForPortfolio(this._items, portfolio)
|
|
1221
|
+
return getPositionItemsForPortfolio(this._items, portfolio)
|
|
1222
|
+
.map((item) => {
|
|
1223
|
+
return item.position;
|
|
1224
|
+
});
|
|
1206
1225
|
}
|
|
1207
1226
|
|
|
1208
1227
|
/**
|
|
@@ -1238,6 +1257,31 @@ module.exports = (() => {
|
|
|
1238
1257
|
namesToUse.forEach((name) => this._trees[name].walk(group => group.setSuspended(false), false, false));
|
|
1239
1258
|
}
|
|
1240
1259
|
|
|
1260
|
+
/**
|
|
1261
|
+
* Registers an observer for symbol addition (this occurs when a new position is added
|
|
1262
|
+
* for a symbol that does not already exist in the container). This event only fires
|
|
1263
|
+
* after the constructor completes (and initial positions have been added).
|
|
1264
|
+
*
|
|
1265
|
+
* @public
|
|
1266
|
+
* @param {Function} handler
|
|
1267
|
+
* @returns {Disposable}
|
|
1268
|
+
*/
|
|
1269
|
+
registerPositionSymbolAddedHandler(handler) {
|
|
1270
|
+
return this._positionSymbolAddedEvent.register(handler);
|
|
1271
|
+
}
|
|
1272
|
+
|
|
1273
|
+
/**
|
|
1274
|
+
* Registers an observer for symbol removal (this occurs when the last position for a
|
|
1275
|
+
* symbol is removed from the container).
|
|
1276
|
+
*
|
|
1277
|
+
* @public
|
|
1278
|
+
* @param {Function} handler
|
|
1279
|
+
* @returns {Disposable}
|
|
1280
|
+
*/
|
|
1281
|
+
registerPositionSymbolAddedHandler(handler) {
|
|
1282
|
+
return this._positionSymbolRemovedEvent.register(handler);
|
|
1283
|
+
}
|
|
1284
|
+
|
|
1241
1285
|
toString() {
|
|
1242
1286
|
return '[PositionContainer]';
|
|
1243
1287
|
}
|
|
@@ -1407,7 +1451,7 @@ module.exports = (() => {
|
|
|
1407
1451
|
function getPositionItemsForPortfolio(items, portfolio) {
|
|
1408
1452
|
return items.reduce((positionItems, item) => {
|
|
1409
1453
|
if (item.position.portfolio === portfolio) {
|
|
1410
|
-
positionItems.push(item
|
|
1454
|
+
positionItems.push(item);
|
|
1411
1455
|
}
|
|
1412
1456
|
|
|
1413
1457
|
return positionItems;
|
|
@@ -1525,7 +1569,7 @@ module.exports = (() => {
|
|
|
1525
1569
|
return PositionContainer;
|
|
1526
1570
|
})();
|
|
1527
1571
|
|
|
1528
|
-
},{"./../data/PositionSummaryFrame":2,"./PositionGroup":5,"./PositionItem":6,"./definitions/PositionLevelDefinition":7,"./definitions/PositionLevelType":8,"./definitions/PositionTreeDefinition":9,"@barchart/common-js/collections/Tree":11,"@barchart/common-js/collections/sorting/ComparatorBuilder":12,"@barchart/common-js/collections/sorting/comparators":13,"@barchart/common-js/collections/specialized/DisposableStack":14,"@barchart/common-js/lang/Currency":15,"@barchart/common-js/lang/Decimal":17,"@barchart/common-js/lang/Rate":20,"@barchart/common-js/lang/array":21,"@barchart/common-js/lang/assert":22,"@barchart/common-js/lang/is":24}],5:[function(require,module,exports){
|
|
1572
|
+
},{"./../data/PositionSummaryFrame":2,"./PositionGroup":5,"./PositionItem":6,"./definitions/PositionLevelDefinition":7,"./definitions/PositionLevelType":8,"./definitions/PositionTreeDefinition":9,"@barchart/common-js/collections/Tree":11,"@barchart/common-js/collections/sorting/ComparatorBuilder":12,"@barchart/common-js/collections/sorting/comparators":13,"@barchart/common-js/collections/specialized/DisposableStack":14,"@barchart/common-js/lang/Currency":15,"@barchart/common-js/lang/Decimal":17,"@barchart/common-js/lang/Rate":20,"@barchart/common-js/lang/array":21,"@barchart/common-js/lang/assert":22,"@barchart/common-js/lang/is":24,"@barchart/common-js/messaging/Event":26}],5:[function(require,module,exports){
|
|
1529
1573
|
const array = require('@barchart/common-js/lang/array'),
|
|
1530
1574
|
assert = require('@barchart/common-js/lang/assert'),
|
|
1531
1575
|
Currency = require('@barchart/common-js/lang/Currency'),
|
|
@@ -1801,6 +1845,11 @@ module.exports = (() => {
|
|
|
1801
1845
|
bindItem.call(this, item);
|
|
1802
1846
|
|
|
1803
1847
|
this.refresh();
|
|
1848
|
+
|
|
1849
|
+
if (this._excluded) {
|
|
1850
|
+
this.setExcluded(false);
|
|
1851
|
+
this.setExcluded(true);
|
|
1852
|
+
}
|
|
1804
1853
|
}
|
|
1805
1854
|
|
|
1806
1855
|
/**
|