@barchart/portfolio-api-common 1.0.144 → 1.0.148

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.
@@ -34,9 +34,10 @@ module.exports = (() => {
34
34
  * @param {Array.<Object>} portfolios
35
35
  * @param {Array.<Object>} positions
36
36
  * @param {Array.<Object>} summaries
37
+ * @param {Object=} exclusionDependencies
37
38
  */
38
39
  class PositionContainer {
39
- constructor(definitions, portfolios, positions, summaries) {
40
+ constructor(definitions, portfolios, positions, summaries, exclusionDependencies) {
40
41
  assert.argumentIsArray(definitions, 'definitions', PositionTreeDefinition, 'PositionTreeDefinition');
41
42
  assert.argumentIsArray(portfolios, 'portfolios');
42
43
  assert.argumentIsArray(positions, 'positions');
@@ -229,17 +230,55 @@ module.exports = (() => {
229
230
 
230
231
  const initializeGroupObservers = (group, groupTree) => {
231
232
  addGroupBinding(group, group.registerGroupExcludedChangeHandler((excluded, sender) => {
232
- groupTree.climb((parentGroup, parentTree) => {
233
- let excludedItems = [ ];
233
+ groupTree.climb((parentGroup) => {
234
+ if (parentGroup) {
235
+ let excludedItems = [];
236
+
237
+ currentTree.walk((childGroup) => {
238
+ if (childGroup.excluded) {
239
+ excludedItems = excludedItems.concat(childGroup.items);
240
+ }
241
+ }, false, false);
242
+
243
+ parentGroup.setExcludedItems(array.unique(excludedItems));
244
+ }
245
+ }, false);
246
+
247
+ const treeName = treeDefinition.name;
248
+
249
+ if (exclusionDependencies && exclusionDependencies.hasOwnProperty(treeName)) {
250
+ let dependantNames = exclusionDependencies[treeName];
234
251
 
235
- currentTree.walk((childGroup, childTree) => {
236
- if (childGroup.excluded) {
237
- excludedItems = excludedItems.concat(childGroup.items);
252
+ if (is.string(dependantNames)) {
253
+ dependantNames = [ dependantNames ];
254
+ } else if (!is.array(dependantNames)) {
255
+ dependantNames = [ ];
256
+ }
257
+
258
+ const dependantTrees = dependantNames.reduce((trees, name) => {
259
+ if ( this._trees.hasOwnProperty(name)) {
260
+ trees.push(this._trees[name]);
238
261
  }
239
- }, false, false);
240
262
 
241
- parentGroup.setExcludedItems(array.unique(excludedItems));
242
- }, false);
263
+ return trees;
264
+ }, [ ]);
265
+
266
+ if (dependantTrees.length > 0) {
267
+ let excludedItems = [ ];
268
+
269
+ groupTree.walk((childGroup) => {
270
+ if (childGroup.excluded) {
271
+ excludedItems = excludedItems.concat(childGroup.items);
272
+ }
273
+ }, false, false);
274
+
275
+ dependantTrees.forEach((dependantTrees) => {
276
+ dependantTrees.walk((childGroup) => {
277
+ childGroup.setExcludedItems(excludedItems);
278
+ }, false, false);
279
+ });
280
+ }
281
+ }
243
282
  }));
244
283
  };
245
284
 
@@ -293,6 +293,8 @@ module.exports = (() => {
293
293
  const key = item.position.position;
294
294
 
295
295
  map[key] = item;
296
+
297
+ return map;
296
298
  }, { });
297
299
 
298
300
  this.refresh();
@@ -24,6 +24,7 @@ module.exports = (() => {
24
24
  /**
25
25
  * The name of the tree.
26
26
  *
27
+ * @public
27
28
  * @returns {String}
28
29
  */
29
30
  get name() {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@barchart/portfolio-api-common",
3
- "version": "1.0.144",
3
+ "version": "1.0.148",
4
4
  "description": "Common classes used by the Portfolio system",
5
5
  "author": {
6
6
  "name": "Bryan Ingle",
@@ -750,9 +750,10 @@ module.exports = (() => {
750
750
  * @param {Array.<Object>} portfolios
751
751
  * @param {Array.<Object>} positions
752
752
  * @param {Array.<Object>} summaries
753
+ * @param {Object=} exclusionDependencies
753
754
  */
754
755
  class PositionContainer {
755
- constructor(definitions, portfolios, positions, summaries) {
756
+ constructor(definitions, portfolios, positions, summaries, exclusionDependencies) {
756
757
  assert.argumentIsArray(definitions, 'definitions', PositionTreeDefinition, 'PositionTreeDefinition');
757
758
  assert.argumentIsArray(portfolios, 'portfolios');
758
759
  assert.argumentIsArray(positions, 'positions');
@@ -945,17 +946,55 @@ module.exports = (() => {
945
946
 
946
947
  const initializeGroupObservers = (group, groupTree) => {
947
948
  addGroupBinding(group, group.registerGroupExcludedChangeHandler((excluded, sender) => {
948
- groupTree.climb((parentGroup, parentTree) => {
949
- let excludedItems = [ ];
949
+ groupTree.climb((parentGroup) => {
950
+ if (parentGroup) {
951
+ let excludedItems = [];
952
+
953
+ currentTree.walk((childGroup) => {
954
+ if (childGroup.excluded) {
955
+ excludedItems = excludedItems.concat(childGroup.items);
956
+ }
957
+ }, false, false);
958
+
959
+ parentGroup.setExcludedItems(array.unique(excludedItems));
960
+ }
961
+ }, false);
962
+
963
+ const treeName = treeDefinition.name;
964
+
965
+ if (exclusionDependencies && exclusionDependencies.hasOwnProperty(treeName)) {
966
+ let dependantNames = exclusionDependencies[treeName];
950
967
 
951
- currentTree.walk((childGroup, childTree) => {
952
- if (childGroup.excluded) {
953
- excludedItems = excludedItems.concat(childGroup.items);
968
+ if (is.string(dependantNames)) {
969
+ dependantNames = [ dependantNames ];
970
+ } else if (!is.array(dependantNames)) {
971
+ dependantNames = [ ];
972
+ }
973
+
974
+ const dependantTrees = dependantNames.reduce((trees, name) => {
975
+ if ( this._trees.hasOwnProperty(name)) {
976
+ trees.push(this._trees[name]);
954
977
  }
955
- }, false, false);
956
978
 
957
- parentGroup.setExcludedItems(array.unique(excludedItems));
958
- }, false);
979
+ return trees;
980
+ }, [ ]);
981
+
982
+ if (dependantTrees.length > 0) {
983
+ let excludedItems = [ ];
984
+
985
+ groupTree.walk((childGroup) => {
986
+ if (childGroup.excluded) {
987
+ excludedItems = excludedItems.concat(childGroup.items);
988
+ }
989
+ }, false, false);
990
+
991
+ dependantTrees.forEach((dependantTrees) => {
992
+ dependantTrees.walk((childGroup) => {
993
+ childGroup.setExcludedItems(excludedItems);
994
+ }, false, false);
995
+ });
996
+ }
997
+ }
959
998
  }));
960
999
  };
961
1000
 
@@ -1511,6 +1550,8 @@ module.exports = (() => {
1511
1550
  const key = item.position.position;
1512
1551
 
1513
1552
  map[key] = item;
1553
+
1554
+ return map;
1514
1555
  }, { });
1515
1556
 
1516
1557
  this.refresh();
@@ -2414,6 +2455,7 @@ module.exports = (() => {
2414
2455
  /**
2415
2456
  * The name of the tree.
2416
2457
  *
2458
+ * @public
2417
2459
  * @returns {String}
2418
2460
  */
2419
2461
  get name() {