@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.removePosition(position);
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.position);
738
+ positionItems.push(item);
695
739
  }
696
740
 
697
741
  return positionItems;
@@ -273,6 +273,11 @@ module.exports = (() => {
273
273
  bindItem.call(this, item);
274
274
 
275
275
  this.refresh();
276
+
277
+ if (this._excluded) {
278
+ this.setExcluded(false);
279
+ this.setExcluded(true);
280
+ }
276
281
  }
277
282
 
278
283
  /**
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@barchart/portfolio-api-common",
3
- "version": "1.0.189",
3
+ "version": "1.0.193",
4
4
  "description": "Common classes used by the Portfolio system",
5
5
  "author": {
6
6
  "name": "Bryan Ingle",
@@ -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.removePosition(position);
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.position);
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
  /**