ng-virtual-list 16.0.13 → 16.0.14

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.
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Tracks display items by property
3
- * @link https://github.com/DjonnyX/ng-virtual-list/blob/16.x/projects/ng-virtual-list/src/lib/utils/tracker.ts
3
+ * @link https://github.com/DjonnyX/ng-virtual-list/blob/15.x/projects/ng-virtual-list/src/lib/utils/tracker.ts
4
4
  * @author Evgenii Grebennikov
5
5
  * @email djonnyx@gmail.com
6
6
  */
@@ -26,6 +26,9 @@ export class Tracker {
26
26
  return this._trackMap;
27
27
  }
28
28
  _trackingPropertyName;
29
+ set trackingPropertyName(v) {
30
+ this._trackingPropertyName = v;
31
+ }
29
32
  constructor(trackingPropertyName) {
30
33
  this._trackingPropertyName = trackingPropertyName;
31
34
  }
@@ -43,17 +46,17 @@ export class Tracker {
43
46
  const diId = this._trackMap[itemTrackingProperty];
44
47
  if (this._trackMap.hasOwnProperty(itemTrackingProperty)) {
45
48
  const lastIndex = this._displayObjectIndexMapById[diId], el = components[lastIndex];
46
- this._checkComponentProperty(el?.instance);
47
- const elId = el?.instance?.[itemTrackingProperty];
49
+ const elId = el?.instance?.id;
48
50
  if (el && elId === diId) {
49
51
  const indexByUntrackedItems = untrackedItems.findIndex(v => {
50
- this._checkComponentProperty(v.instance);
51
- return v.instance[itemTrackingProperty] === elId;
52
+ return v.instance.id === elId;
52
53
  });
53
54
  if (indexByUntrackedItems > -1) {
54
- el.instance.item = item;
55
- if (afterComponentSetup !== undefined) {
56
- afterComponentSetup(el.instance, item);
55
+ if (el.instance.item !== item) {
56
+ el.instance.item = item;
57
+ if (afterComponentSetup !== undefined) {
58
+ afterComponentSetup(el.instance, item);
59
+ }
57
60
  }
58
61
  untrackedItems.splice(indexByUntrackedItems, 1);
59
62
  continue;
@@ -65,13 +68,14 @@ export class Tracker {
65
68
  if (untrackedItems.length > 0) {
66
69
  const el = untrackedItems.shift(), item = items[i];
67
70
  if (el) {
68
- el.instance.item = item;
69
- if (this._trackMap) {
70
- this._checkComponentProperty(el.instance);
71
- this._trackMap[itemTrackingProperty] = el.instance[itemTrackingProperty];
72
- }
73
- if (afterComponentSetup !== undefined) {
74
- afterComponentSetup(el.instance, item);
71
+ if (el.instance.item !== item) {
72
+ el.instance.item = item;
73
+ if (this._trackMap) {
74
+ this._trackMap[itemTrackingProperty] = el.instance.id;
75
+ }
76
+ if (afterComponentSetup !== undefined) {
77
+ afterComponentSetup(el.instance, item);
78
+ }
75
79
  }
76
80
  }
77
81
  }
@@ -85,25 +89,12 @@ export class Tracker {
85
89
  return;
86
90
  }
87
91
  const propertyIdName = this._trackingPropertyName;
88
- this._checkComponentProperty(component);
89
92
  if (this._trackMap && component[propertyIdName] !== undefined) {
90
93
  delete this._trackMap[propertyIdName];
91
94
  }
92
95
  }
93
- _checkComponentProperty(component) {
94
- if (!component) {
95
- return;
96
- }
97
- const propertyIdName = this._trackingPropertyName;
98
- try {
99
- component[propertyIdName];
100
- }
101
- catch (err) {
102
- throw Error(`Property ${propertyIdName} does not exist.`);
103
- }
104
- }
105
96
  dispose() {
106
97
  this._trackMap = null;
107
98
  }
108
99
  }
109
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhY2tlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXZpcnR1YWwtbGlzdC9zcmMvbGliL3V0aWxzL3RyYWNrZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBSUE7Ozs7O0dBS0c7QUFDSCxNQUFNLE9BQU8sT0FBTztJQUNoQjs7T0FFRztJQUNLLDBCQUEwQixHQUE2QixFQUFFLENBQUM7SUFFbEUsSUFBSSx5QkFBeUIsQ0FBQyxDQUEyQjtRQUNyRCxJQUFJLElBQUksQ0FBQywwQkFBMEIsS0FBSyxDQUFDLEVBQUU7WUFDdkMsT0FBTztTQUNWO1FBRUQsSUFBSSxDQUFDLDBCQUEwQixHQUFHLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRUQsSUFBSSx5QkFBeUI7UUFDekIsT0FBTyxJQUFJLENBQUMsMEJBQTBCLENBQUM7SUFDM0MsQ0FBQztJQUVEOztPQUVHO0lBQ0ssU0FBUyxHQUFnRCxFQUFFLENBQUM7SUFFcEUsSUFBSSxRQUFRO1FBQ1IsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQzFCLENBQUM7SUFFTyxxQkFBcUIsQ0FBVTtJQUV2QyxZQUFZLG9CQUE0QjtRQUNwQyxJQUFJLENBQUMscUJBQXFCLEdBQUcsb0JBQW9CLENBQUM7SUFDdEQsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLEtBQWlCLEVBQUUsVUFBb0MsRUFDekQsbUJBQXFEO1FBQ3JELElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDUixPQUFPO1NBQ1Y7UUFFRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMscUJBQXFCLEVBQUUsY0FBYyxHQUFHLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQztRQUVoRixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQzFDLE1BQU0sSUFBSSxHQUFHLEtB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QUNMLENBQUM7SUFFTyx1QkFBdUIsQ0FBQyxTQUFhO1FBQ3pDLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDWixPQUFPO1NBQ1Y7UUFFRCxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUM7UUFFbEQsSUFBSTtZQUNDLFNBQWlCLENBQUMsY0FBYyxDQUFDLENBQUM7U0FDdEM7UUFBQyxPQUFPLEdBQUcsRUFBRTtZQUNWLE1BQU0sS0FBSyxDQUFDLFlBQVksY0FBYyxrQkFBa0IsQ0FBQyxDQUFDO1NBQzdEO0lBQ0wsQ0FBQztJQUVELE9BQU87UUFDSCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztJQUMxQixDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnRSZWYgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5cclxudHlwZSBUcmFja2luZ1Byb3BlcnR5SWQgPSBzdHJpbmcgfCBudW1iZXI7XHJcblxyXG4vKipcclxuICogVHJhY2tzIGRpc3BsYXkgaXRlbXMgYnkgcHJvcGVydHlcclxuICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL0Rqb25ueVgvbmctdmlydHVhbC1saXN0L2Jsb2IvMTYueC9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi91dGlscy90cmFja2VyLnRzXHJcbiAqIEBhdXRob3IgRXZnZW5paSBHcmViZW5uaWtvdlxyXG4gKiBAZW1haWwgZGpvbm55eEBnbWFpbC5jb21cclxuICovXHJcbmV4cG9ydCBjbGFzcyBUcmFja2VyPEkgPSBhbnksIEMgPSB7IFtwcm9wOiBzdHJpbmddOiBhbnk7IH0+IHtcclxuICAgIC8qKlxyXG4gICAgICogZGlzcGxheSBvYmplY3RzIGRpY3Rpb25hcnkgb2YgaW5kZXhlcyBieSBpZFxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIF9kaXNwbGF5T2JqZWN0SW5kZXhNYXBCeUlkOiB7IFtpZDogbnVtYmVyXTogbnVtYmVyIH0gPSB7fTtcclxuXHJcbiAgICBzZXQgZGlzcGxheU9iamVjdEluZGV4TWFwQnlJZCh2OiB7IFtpZDogbnVtYmVyXTogbnVtYmVyIH0pIHtcclxuICAgICAgICBpZiAodGhpcy5fZGlzcGxheU9iamVjdEluZGV4TWFwQnlJZCA9PT0gdikge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9kaXNwbGF5T2JqZWN0SW5kZXhNYXBCeUlkID0gdjtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgZGlzcGxheU9iamVjdEluZGV4TWFwQnlJZCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZGlzcGxheU9iamVjdEluZGV4TWFwQnlJZDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIERpY3Rpb25hcnkgZGlzcGxheUl0ZW1zIHByb3BlcnR5TmFtZUlkIGJ5IGl0ZW1zIHByb3BlcnR5TmFtZUlkXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgX3RyYWNrTWFwOiB7IFtpZDogVHJhY2tpbmdQcm9wZXJ0eUlkXTogbnVtYmVyIH0gfCBudWxsID0ge307XHJcblxyXG4gICAgZ2V0IHRyYWNrTWFwKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl90cmFja01hcDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF90cmFja2luZ1Byb3BlcnR5TmFtZSE6IHN0cmluZztcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcih0cmFja2luZ1Byb3BlcnR5TmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5fdHJhY2tpbmdQcm9wZXJ0eU5hbWUgPSB0cmFja2luZ1Byb3BlcnR5TmFtZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIHRyYWNraW5nIGJ5IHByb3BOYW1lXHJcbiAgICAgKi9cclxuICAgIHRyYWNrKGl0ZW1zOiBBcnJheTxhbnk+LCBjb21wb25lbnRzOiBBcnJheTxDb21wb25lbnRSZWY8YW55Pj4sXHJcbiAgICAgICAgYWZ0ZXJDb21wb25lbnRTZXR1cD86IChjb21wb25lbnQ6IEMsIGl0ZW06IEkpID0+IHZvaWQpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIWl0ZW1zKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGlkUHJvcE5hbWUgPSB0aGlzLl90cmFja2luZ1Byb3BlcnR5TmFtZSwgdW50cmFja2VkSXRlbXMgPSBbLi4uY29tcG9uZW50c107XHJcblxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsID0gaXRlbXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBpdGVtc1tpXSwgaXRlbVRyYWNraW5nUHJvcGVydHkgPSBpdGVtW2lkUHJvcE5hbWVdO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuX3RyYWNrTWFwKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBkaUlkID0gdGhpcy5fdHJhY2tNYXBbaXRlbVRyYWNraW5nUHJvcGVydHldO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX3RyYWNrTWFwLmhhc093blByb3BlcnR5KGl0ZW1UcmFja2luZ1Byb3BlcnR5KSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxhc3RJbmRleCA9IHRoaXMuX2Rpc3BsYXlPYmplY3RJbmRleE1hcEJ5SWRbZGlJZF0sIGVsID0gY29tcG9uZW50c1tsYXN0SW5kZXhdO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGVja0NvbXBvbmVudFByb3BlcnR5KGVsPy5pbnN0YW5jZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVsSWQgPSBlbD8uaW5zdGFuY2U/LltpdGVtVHJhY2tpbmdQcm9wZXJ0eV07XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVsICYmIGVsSWQgPT09IGRpSWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5kZXhCeVVudHJhY2tlZEl0ZW1zID0gdW50cmFja2VkSXRlbXMuZmluZEluZGV4KHYgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hlY2tDb21wb25lbnRQcm9wZXJ0eSh2Lmluc3RhbmNlKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdi5pbnN0YW5jZVtpdGVtVHJhY2tpbmdQcm9wZXJ0eV0gPT09IGVsSWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXhCeVVudHJhY2tlZEl0ZW1zID4gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsLmluc3RhbmNlLml0ZW0gPSBpdGVtO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhZnRlckNvbXBvbmVudFNldHVwICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZnRlckNvbXBvbmVudFNldHVwKGVsLmluc3RhbmNlLCBpdGVtKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnRyYWNrZWRJdGVtcy5zcGxpY2UoaW5kZXhCeVVudHJhY2tlZEl0ZW1zLCAxKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl90cmFja01hcFtpdGVtVHJhY2tpbmdQcm9wZXJ0eV07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh1bnRyYWNrZWRJdGVtcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBlbCA9IHVudHJhY2tlZEl0ZW1zLnNoaWZ0KCksIGl0ZW0gPSBpdGVtc1tpXTtcclxuICAgICAgICAgICAgICAgIGlmIChlbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGVsLmluc3RhbmNlLml0ZW0gPSBpdGVtO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fdHJhY2tNYXApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hlY2tDb21wb25lbnRQcm9wZXJ0eShlbC5pbnN0YW5jZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl90cmFja01hcFtpdGVtVHJhY2tpbmdQcm9wZXJ0eV0gPSBlbC5pbnN0YW5jZVtpdGVtVHJhY2tpbmdQcm9wZXJ0eV07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoYWZ0ZXJDb21wb25lbnRTZXR1cCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFmdGVyQ29tcG9uZW50U2V0dXAoZWwuaW5zdGFuY2UsIGl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHVudHJhY2tlZEl0ZW1zLmxlbmd0aCkge1xyXG4gICAgICAgICAgICB0aHJvdyBFcnJvcignVHJhY2tpbmcgYnkgaWQgY2F1c2VkIGFuIGVycm9yLicpXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHVudHJhY2tDb21wb25lbnRCeUlkUHJvcGVydHkoY29tcG9uZW50PzogQyk6IHZvaWQge1xyXG4gICAgICAgIGlmICghY29tcG9uZW50KSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHByb3BlcnR5SWROYW1lID0gdGhpcy5fdHJhY2tpbmdQcm9wZXJ0eU5hbWU7XHJcblxyXG4gICAgICAgIHRoaXMuX2NoZWNrQ29tcG9uZW50UHJvcGVydHkoY29tcG9uZW50KTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX3RyYWNrTWFwICYmIChjb21wb25lbnQgYXMgYW55KVtwcm9wZXJ0eUlkTmFtZV0gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICBkZWxldGUgdGhpcy5fdHJhY2tNYXBbcHJvcGVydHlJZE5hbWVdO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9jaGVja0NvbXBvbmVudFByb3BlcnR5KGNvbXBvbmVudD86IEMpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIWNvbXBvbmVudCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBwcm9wZXJ0eUlkTmFtZSA9IHRoaXMuX3RyYWNraW5nUHJvcGVydHlOYW1lO1xyXG5cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAoY29tcG9uZW50IGFzIGFueSlbcHJvcGVydHlJZE5hbWVdO1xyXG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICB0aHJvdyBFcnJvcihgUHJvcGVydHkgJHtwcm9wZXJ0eUlkTmFtZX0gZG9lcyBub3QgZXhpc3QuYCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGRpc3Bvc2UoKSB7XHJcbiAgICAgICAgdGhpcy5fdHJhY2tNYXAgPSBudWxsO1xyXG4gICAgfVxyXG59Il19
100
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhY2tlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXZpcnR1YWwtbGlzdC9zcmMvbGliL3V0aWxzL3RyYWNrZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBSUE7Ozs7O0dBS0c7QUFDSCxNQUFNLE9BQU8sT0FBTztJQUNoQjs7T0FFRztJQUNLLDBCQUEwQixHQUE2QixFQUFFLENBQUM7SUFFbEUsSUFBSSx5QkFBeUIsQ0FBQyxDQUEyQjtRQUNyRCxJQUFJLElBQUksQ0FBQywwQkFBMEIsS0FBSyxDQUFDLEVBQUU7WUFDdkMsT0FBTztTQUNWO1FBRUQsSUFBSSxDQUFDLDBCQUEwQixHQUFHLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRUQsSUFBSSx5QkFBeUI7UUFDekIsT0FBTyxJQUFJLENBQUMsMEJBQTBCLENBQUM7SUFDM0MsQ0FBQztJQUVEOztPQUVHO0lBQ0ssU0FBUyxHQUFnRCxFQUFFLENBQUM7SUFFcEUsSUFBSSxRQUFRO1FBQ1IsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQzFCLENBQUM7SUFFTyxxQkFBcUIsQ0FBVTtJQUV2QyxJQUFJLG9CQUFvQixDQUFDLENBQVM7UUFDOUIsSUFBSSxDQUFDLHFCQUFxQixHQUFHLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRUQsWUFBWSxvQkFBNEI7UUFDcEMsSUFBSSxDQUFDLHFCQUFxQixHQUFHLG9CQUFvQixDQUFDO0lBQ3RELENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUssQ0FBQyxLQUFpQixFQUFFLFVBQW9DLEVBQ3pELG1CQUFxRDtRQUNyRCxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ1IsT0FBTztTQUNWO1FBRUQsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixFQUFFLGNBQWMsR0FBRyxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUM7UUFFaEYsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtB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R0FBRyxJQUFJLENBQUM7SUFDMUIsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50UmVmIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuXHJcbnR5cGUgVHJhY2tpbmdQcm9wZXJ0eUlkID0gc3RyaW5nIHwgbnVtYmVyO1xyXG5cclxuLyoqXHJcbiAqIFRyYWNrcyBkaXNwbGF5IGl0ZW1zIGJ5IHByb3BlcnR5XHJcbiAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9Eam9ubnlYL25nLXZpcnR1YWwtbGlzdC9ibG9iLzE1LngvcHJvamVjdHMvbmctdmlydHVhbC1saXN0L3NyYy9saWIvdXRpbHMvdHJhY2tlci50c1xyXG4gKiBAYXV0aG9yIEV2Z2VuaWkgR3JlYmVubmlrb3ZcclxuICogQGVtYWlsIGRqb25ueXhAZ21haWwuY29tXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgVHJhY2tlcjxJID0gYW55LCBDID0geyBbcHJvcDogc3RyaW5nXTogYW55OyB9PiB7XHJcbiAgICAvKipcclxuICAgICAqIGRpc3BsYXkgb2JqZWN0cyBkaWN0aW9uYXJ5IG9mIGluZGV4ZXMgYnkgaWRcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBfZGlzcGxheU9iamVjdEluZGV4TWFwQnlJZDogeyBbaWQ6IG51bWJlcl06IG51bWJlciB9ID0ge307XHJcblxyXG4gICAgc2V0IGRpc3BsYXlPYmplY3RJbmRleE1hcEJ5SWQodjogeyBbaWQ6IG51bWJlcl06IG51bWJlciB9KSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2Rpc3BsYXlPYmplY3RJbmRleE1hcEJ5SWQgPT09IHYpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fZGlzcGxheU9iamVjdEluZGV4TWFwQnlJZCA9IHY7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGRpc3BsYXlPYmplY3RJbmRleE1hcEJ5SWQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Rpc3BsYXlPYmplY3RJbmRleE1hcEJ5SWQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEaWN0aW9uYXJ5IGRpc3BsYXlJdGVtcyBwcm9wZXJ0eU5hbWVJZCBieSBpdGVtcyBwcm9wZXJ0eU5hbWVJZFxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIF90cmFja01hcDogeyBbaWQ6IFRyYWNraW5nUHJvcGVydHlJZF06IG51bWJlciB9IHwgbnVsbCA9IHt9O1xyXG5cclxuICAgIGdldCB0cmFja01hcCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fdHJhY2tNYXA7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfdHJhY2tpbmdQcm9wZXJ0eU5hbWUhOiBzdHJpbmc7XHJcblxyXG4gICAgc2V0IHRyYWNraW5nUHJvcGVydHlOYW1lKHY6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMuX3RyYWNraW5nUHJvcGVydHlOYW1lID0gdjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdHJ1Y3Rvcih0cmFja2luZ1Byb3BlcnR5TmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5fdHJhY2tpbmdQcm9wZXJ0eU5hbWUgPSB0cmFja2luZ1Byb3BlcnR5TmFtZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIHRyYWNraW5nIGJ5IHByb3BOYW1lXHJcbiAgICAgKi9cclxuICAgIHRyYWNrKGl0ZW1zOiBBcnJheTxhbnk+LCBjb21wb25lbnRzOiBBcnJheTxDb21wb25lbnRSZWY8YW55Pj4sXHJcbiAgICAgICAgYWZ0ZXJDb21wb25lbnRTZXR1cD86IChjb21wb25lbnQ6IEMsIGl0ZW06IEkpID0+IHZvaWQpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIWl0ZW1zKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGlkUHJvcE5hbWUgPSB0aGlzLl90cmFja2luZ1Byb3BlcnR5TmFtZSwgdW50cmFja2VkSXRlbXMgPSBbLi4uY29tcG9uZW50c107XHJcblxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsID0gaXRlbXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBpdGVtc1tpXSwgaXRlbVRyYWNraW5nUHJvcGVydHkgPSBpdGVtW2lkUHJvcE5hbWVdO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuX3RyYWNrTWFwKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBkaUlkID0gdGhpcy5fdHJhY2tNYXBbaXRlbVRyYWNraW5nUHJvcGVydHldO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX3RyYWNrTWFwLmhhc093blByb3BlcnR5KGl0ZW1UcmFja2luZ1Byb3BlcnR5KSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxhc3RJbmRleCA9IHRoaXMuX2Rpc3BsYXlPYmplY3RJbmRleE1hcEJ5SWRbZGlJZF0sIGVsID0gY29tcG9uZW50c1tsYXN0SW5kZXhdO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBlbElkID0gZWw/Lmluc3RhbmNlPy5pZDtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZWwgJiYgZWxJZCA9PT0gZGlJZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbmRleEJ5VW50cmFja2VkSXRlbXMgPSB1bnRyYWNrZWRJdGVtcy5maW5kSW5kZXgodiA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdi5pbnN0YW5jZS5pZCA9PT0gZWxJZDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmRleEJ5VW50cmFja2VkSXRlbXMgPiAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVsLmluc3RhbmNlLml0ZW0gIT09IGl0ZW0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbC5pbnN0YW5jZS5pdGVtID0gaXRlbTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFmdGVyQ29tcG9uZW50U2V0dXAgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZnRlckNvbXBvbmVudFNldHVwKGVsLmluc3RhbmNlLCBpdGVtKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdW50cmFja2VkSXRlbXMuc3BsaWNlKGluZGV4QnlVbnRyYWNrZWRJdGVtcywgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5fdHJhY2tNYXBbaXRlbVRyYWNraW5nUHJvcGVydHldO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodW50cmFja2VkSXRlbXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZWwgPSB1bnRyYWNrZWRJdGVtcy5zaGlmdCgpLCBpdGVtID0gaXRlbXNbaV07XHJcbiAgICAgICAgICAgICAgICBpZiAoZWwpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZWwuaW5zdGFuY2UuaXRlbSAhPT0gaXRlbSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbC5pbnN0YW5jZS5pdGVtID0gaXRlbTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl90cmFja01hcCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdHJhY2tNYXBbaXRlbVRyYWNraW5nUHJvcGVydHldID0gZWwuaW5zdGFuY2UuaWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhZnRlckNvbXBvbmVudFNldHVwICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFmdGVyQ29tcG9uZW50U2V0dXAoZWwuaW5zdGFuY2UsIGl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodW50cmFja2VkSXRlbXMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHRocm93IEVycm9yKCdUcmFja2luZyBieSBpZCBjYXVzZWQgYW4gZXJyb3IuJylcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdW50cmFja0NvbXBvbmVudEJ5SWRQcm9wZXJ0eShjb21wb25lbnQ/OiBDKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCFjb21wb25lbnQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgcHJvcGVydHlJZE5hbWUgPSB0aGlzLl90cmFja2luZ1Byb3BlcnR5TmFtZTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX3RyYWNrTWFwICYmIChjb21wb25lbnQgYXMgYW55KVtwcm9wZXJ0eUlkTmFtZV0gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICBkZWxldGUgdGhpcy5fdHJhY2tNYXBbcHJvcGVydHlJZE5hbWVdO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBkaXNwb3NlKCkge1xyXG4gICAgICAgIHRoaXMuX3RyYWNrTWFwID0gbnVsbDtcclxuICAgIH1cclxufSJdfQ==
@@ -2,7 +2,7 @@ import * as i0 from '@angular/core';
2
2
  import { Component, ChangeDetectionStrategy, EventEmitter as EventEmitter$1, ViewContainerRef, ElementRef, ViewEncapsulation, ViewChild, Output, Input, NgModule, NO_ERRORS_SCHEMA } from '@angular/core';
3
3
  import * as i1 from '@angular/common';
4
4
  import { CommonModule } from '@angular/common';
5
- import { BehaviorSubject, filter, map, tap, combineLatest, distinctUntilChanged, debounceTime, switchMap, of } from 'rxjs';
5
+ import { BehaviorSubject, tap, filter, map, combineLatest, distinctUntilChanged, debounceTime, switchMap, of } from 'rxjs';
6
6
  import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
7
7
 
8
8
  /**
@@ -60,7 +60,7 @@ const CLASS_LIST_HORIZONTAL = 'horizontal';
60
60
 
61
61
  /**
62
62
  * Virtual list item component
63
- * @link https://github.com/DjonnyX/ng-virtual-list/blob/16.x/projects/ng-virtual-list/src/lib/components/ng-virtual-list-item.component.ts
63
+ * @link https://github.com/DjonnyX/ng-virtual-list/blob/15.x/projects/ng-virtual-list/src/lib/components/ng-virtual-list-item.component.ts
64
64
  * @author Evgenii Grebennikov
65
65
  * @email djonnyx@gmail.com
66
66
  */
@@ -94,6 +94,9 @@ class NgVirtualListItemComponent {
94
94
  }
95
95
  this._cdr.detectChanges();
96
96
  }
97
+ get item() {
98
+ return this.data;
99
+ }
97
100
  get itemId() {
98
101
  return this.data?.id;
99
102
  }
@@ -105,6 +108,9 @@ class NgVirtualListItemComponent {
105
108
  this.itemRenderer = v;
106
109
  this._cdr.markForCheck();
107
110
  }
111
+ get element() {
112
+ return this._elementRef.nativeElement;
113
+ }
108
114
  constructor(_cdr, _elementRef) {
109
115
  this._cdr = _cdr;
110
116
  this._elementRef = _elementRef;
@@ -201,7 +207,7 @@ const toggleClassName = (el, className, remove = false) => {
201
207
 
202
208
  /**
203
209
  * Tracks display items by property
204
- * @link https://github.com/DjonnyX/ng-virtual-list/blob/16.x/projects/ng-virtual-list/src/lib/utils/tracker.ts
210
+ * @link https://github.com/DjonnyX/ng-virtual-list/blob/15.x/projects/ng-virtual-list/src/lib/utils/tracker.ts
205
211
  * @author Evgenii Grebennikov
206
212
  * @email djonnyx@gmail.com
207
213
  */
@@ -227,6 +233,9 @@ class Tracker {
227
233
  return this._trackMap;
228
234
  }
229
235
  _trackingPropertyName;
236
+ set trackingPropertyName(v) {
237
+ this._trackingPropertyName = v;
238
+ }
230
239
  constructor(trackingPropertyName) {
231
240
  this._trackingPropertyName = trackingPropertyName;
232
241
  }
@@ -244,17 +253,17 @@ class Tracker {
244
253
  const diId = this._trackMap[itemTrackingProperty];
245
254
  if (this._trackMap.hasOwnProperty(itemTrackingProperty)) {
246
255
  const lastIndex = this._displayObjectIndexMapById[diId], el = components[lastIndex];
247
- this._checkComponentProperty(el?.instance);
248
- const elId = el?.instance?.[itemTrackingProperty];
256
+ const elId = el?.instance?.id;
249
257
  if (el && elId === diId) {
250
258
  const indexByUntrackedItems = untrackedItems.findIndex(v => {
251
- this._checkComponentProperty(v.instance);
252
- return v.instance[itemTrackingProperty] === elId;
259
+ return v.instance.id === elId;
253
260
  });
254
261
  if (indexByUntrackedItems > -1) {
255
- el.instance.item = item;
256
- if (afterComponentSetup !== undefined) {
257
- afterComponentSetup(el.instance, item);
262
+ if (el.instance.item !== item) {
263
+ el.instance.item = item;
264
+ if (afterComponentSetup !== undefined) {
265
+ afterComponentSetup(el.instance, item);
266
+ }
258
267
  }
259
268
  untrackedItems.splice(indexByUntrackedItems, 1);
260
269
  continue;
@@ -266,13 +275,14 @@ class Tracker {
266
275
  if (untrackedItems.length > 0) {
267
276
  const el = untrackedItems.shift(), item = items[i];
268
277
  if (el) {
269
- el.instance.item = item;
270
- if (this._trackMap) {
271
- this._checkComponentProperty(el.instance);
272
- this._trackMap[itemTrackingProperty] = el.instance[itemTrackingProperty];
273
- }
274
- if (afterComponentSetup !== undefined) {
275
- afterComponentSetup(el.instance, item);
278
+ if (el.instance.item !== item) {
279
+ el.instance.item = item;
280
+ if (this._trackMap) {
281
+ this._trackMap[itemTrackingProperty] = el.instance.id;
282
+ }
283
+ if (afterComponentSetup !== undefined) {
284
+ afterComponentSetup(el.instance, item);
285
+ }
276
286
  }
277
287
  }
278
288
  }
@@ -286,23 +296,10 @@ class Tracker {
286
296
  return;
287
297
  }
288
298
  const propertyIdName = this._trackingPropertyName;
289
- this._checkComponentProperty(component);
290
299
  if (this._trackMap && component[propertyIdName] !== undefined) {
291
300
  delete this._trackMap[propertyIdName];
292
301
  }
293
302
  }
294
- _checkComponentProperty(component) {
295
- if (!component) {
296
- return;
297
- }
298
- const propertyIdName = this._trackingPropertyName;
299
- try {
300
- component[propertyIdName];
301
- }
302
- catch (err) {
303
- throw Error(`Property ${propertyIdName} does not exist.`);
304
- }
305
- }
306
303
  dispose() {
307
304
  this._trackMap = null;
308
305
  }
@@ -417,7 +414,7 @@ const MAX_SCROLL_DIRECTION_POOL = 8, CLEAR_SCROLL_DIRECTION_TO = 0;
417
414
  /**
418
415
  * Cache map.
419
416
  * Emits a change event on each mutation.
420
- * @link https://github.com/DjonnyX/ng-virtual-list/blob/16.x/projects/ng-virtual-list/src/lib/utils/cacheMap.ts
417
+ * @link https://github.com/DjonnyX/ng-virtual-list/blob/15.x/projects/ng-virtual-list/src/lib/utils/cacheMap.ts
421
418
  * @author Evgenii Grebennikov
422
419
  * @email djonnyx@gmail.com
423
420
  */
@@ -481,7 +478,11 @@ class CacheMap extends EventEmitter {
481
478
  this.dispatch('change', this.version);
482
479
  }
483
480
  set(id, bounds) {
484
- if (this._map.has(id) && JSON.stringify(this._map.get(id)) === JSON.stringify(bounds)) {
481
+ if (this._map.has(id)) {
482
+ const b = this._map.get(id), bb = bounds;
483
+ if (b.width === bb.width && b.height === bb.height) {
484
+ return this._map;
485
+ }
485
486
  return this._map;
486
487
  }
487
488
  const v = this._map.set(id, bounds);
@@ -508,56 +509,6 @@ class CacheMap extends EventEmitter {
508
509
  }
509
510
  }
510
511
 
511
- /**
512
- * Returns the removed or updated elements of a collection.
513
- * @link https://github.com/DjonnyX/ng-virtual-list/blob/16.x/projects/ng-virtual-list/src/lib/utils/collection.ts
514
- * @author Evgenii Grebennikov
515
- * @email djonnyx@gmail.com
516
- */
517
- const getCollectionRemovedOrUpdatedItems = (previousCollection, currentCollection) => {
518
- const result = { deleted: new Array(), updated: new Array(), added: new Array(), notChanged: new Array() };
519
- if (!currentCollection || currentCollection.length === 0) {
520
- return { deleted: (previousCollection ? [...previousCollection] : []), updated: [], added: [], notChanged: [] };
521
- }
522
- if (!previousCollection || previousCollection.length === 0) {
523
- return { deleted: [], updated: [], added: (currentCollection ? [...currentCollection] : []), notChanged: [] };
524
- }
525
- const collectionDict = {};
526
- for (let i = 0, l = currentCollection.length; i < l; i++) {
527
- const item = currentCollection[i];
528
- if (item) {
529
- collectionDict[item.id] = item;
530
- }
531
- }
532
- const notChangedMap = {}, deletedMap = {}, updatedMap = {};
533
- for (let i = 0, l = previousCollection.length; i < l; i++) {
534
- const item = previousCollection[i], id = item.id;
535
- if (item) {
536
- if (collectionDict.hasOwnProperty(id)) {
537
- if (item === collectionDict[id]) {
538
- result.notChanged.push(item);
539
- notChangedMap[item.id] = item;
540
- continue;
541
- }
542
- else {
543
- result.updated.push(item);
544
- updatedMap[item.id] = item;
545
- continue;
546
- }
547
- }
548
- result.deleted.push(item);
549
- deletedMap[item.id] = item;
550
- }
551
- }
552
- for (let i = 0, l = currentCollection.length; i < l; i++) {
553
- const item = currentCollection[i], id = item.id;
554
- if (item && !deletedMap.hasOwnProperty(id) && !updatedMap.hasOwnProperty(id) && !notChangedMap.hasOwnProperty(id)) {
555
- result.added.push(item);
556
- }
557
- }
558
- return result;
559
- };
560
-
561
512
  const TRACK_BOX_CHANGE_EVENT_NAME = 'change';
562
513
  var ItemDisplayMethods;
563
514
  (function (ItemDisplayMethods) {
@@ -568,7 +519,7 @@ var ItemDisplayMethods;
568
519
  })(ItemDisplayMethods || (ItemDisplayMethods = {}));
569
520
  /**
570
521
  * An object that performs tracking, calculations and caching.
571
- * @link https://github.com/DjonnyX/ng-virtual-list/blob/16.x/projects/ng-virtual-list/src/lib/utils/trackBox.ts
522
+ * @link https://github.com/DjonnyX/ng-virtual-list/blob/15.x/projects/ng-virtual-list/src/lib/utils/trackBox.ts
572
523
  * @author Evgenii Grebennikov
573
524
  * @email djonnyx@gmail.com
574
525
  */
@@ -588,13 +539,22 @@ class TrackBox extends CacheMap {
588
539
  }
589
540
  this._displayComponents = v;
590
541
  }
542
+ /**
543
+ * Set the trackBy property
544
+ */
545
+ set trackingPropertyName(v) {
546
+ this._tracker.trackingPropertyName = v;
547
+ }
591
548
  constructor(trackingPropertyName) {
592
549
  super();
593
550
  this._tracker = new Tracker(trackingPropertyName);
594
551
  }
595
552
  set(id, bounds) {
596
- if (this._map.has(id) && JSON.stringify(this._map.get(id)) === JSON.stringify(bounds)) {
597
- return this._map;
553
+ if (this._map.has(id)) {
554
+ const b = this._map.get(id);
555
+ if (b?.width === bounds.width && b.height === bounds.height) {
556
+ return this._map;
557
+ }
598
558
  }
599
559
  const v = this._map.set(id, bounds);
600
560
  this.bumpVersion();
@@ -617,31 +577,69 @@ class TrackBox extends CacheMap {
617
577
  console.warn('Attention! The collection must be immutable.');
618
578
  return;
619
579
  }
620
- const { deleted, updated, added } = getCollectionRemovedOrUpdatedItems(this._previousCollection, currentCollection);
621
- this.clearCache(deleted, updated, added, itemSize);
580
+ this.updateCache(this._previousCollection, currentCollection, itemSize);
622
581
  this._previousCollection = currentCollection;
623
582
  }
624
583
  /**
625
- * Clears the cache of items from the list
584
+ * Update the cache of items from the list
626
585
  */
627
- clearCache(deleted, updated, added, itemSize) {
628
- if (deleted) {
629
- for (let i = 0, l = deleted.length; i < l; i++) {
630
- const item = deleted[i], id = item.id;
631
- if (this._map.has(id)) {
632
- this._map.delete(id);
586
+ updateCache(previousCollection, currentCollection, itemSize) {
587
+ if (!currentCollection || currentCollection.length === 0) {
588
+ if (previousCollection) {
589
+ // deleted
590
+ for (let i = 0, l = previousCollection.length; i < l; i++) {
591
+ const item = previousCollection[i], id = item.id;
592
+ if (this._map.has(id)) {
593
+ this._map.delete(id);
594
+ }
595
+ }
596
+ }
597
+ return;
598
+ }
599
+ if (!previousCollection || previousCollection.length === 0) {
600
+ if (currentCollection) {
601
+ // added
602
+ for (let i = 0, l = currentCollection.length; i < l; i++) {
603
+ const item = currentCollection[i], id = item.id;
604
+ this._map.set(id, { x: 0, y: 0, width: itemSize, height: itemSize, method: ItemDisplayMethods.CREATE });
633
605
  }
634
606
  }
607
+ return;
608
+ }
609
+ const collectionDict = {};
610
+ for (let i = 0, l = currentCollection.length; i < l; i++) {
611
+ const item = currentCollection[i];
612
+ if (item) {
613
+ collectionDict[item.id] = item;
614
+ }
635
615
  }
636
- if (updated) {
637
- for (let i = 0, l = updated.length; i < l; i++) {
638
- const item = updated[i], id = item.id;
639
- this._map.set(id, { ...(this._map.get(id) || { x: 0, y: 0, width: itemSize, height: itemSize }), method: ItemDisplayMethods.UPDATE });
616
+ const notChangedMap = {}, deletedMap = {}, updatedMap = {};
617
+ for (let i = 0, l = previousCollection.length; i < l; i++) {
618
+ const item = previousCollection[i], id = item.id;
619
+ if (item) {
620
+ if (collectionDict.hasOwnProperty(id)) {
621
+ if (item === collectionDict[id]) {
622
+ // not changed
623
+ notChangedMap[item.id] = item;
624
+ this._map.set(id, { ...(this._map.get(id) || { x: 0, y: 0, width: itemSize, height: itemSize }), method: ItemDisplayMethods.NOT_CHANGED });
625
+ continue;
626
+ }
627
+ else {
628
+ // updated
629
+ updatedMap[item.id] = item;
630
+ this._map.set(id, { ...(this._map.get(id) || { x: 0, y: 0, width: itemSize, height: itemSize }), method: ItemDisplayMethods.UPDATE });
631
+ continue;
632
+ }
633
+ }
634
+ // deleted
635
+ deletedMap[item.id] = item;
636
+ this._map.delete(id);
640
637
  }
641
638
  }
642
- if (added) {
643
- for (let i = 0, l = added.length; i < l; i++) {
644
- const item = added[i], id = item.id;
639
+ for (let i = 0, l = currentCollection.length; i < l; i++) {
640
+ const item = currentCollection[i], id = item.id;
641
+ if (item && !deletedMap.hasOwnProperty(id) && !updatedMap.hasOwnProperty(id) && !notChangedMap.hasOwnProperty(id)) {
642
+ // added
645
643
  this._map.set(id, { x: 0, y: 0, width: itemSize, height: itemSize, method: ItemDisplayMethods.CREATE });
646
644
  }
647
645
  }
@@ -913,6 +911,10 @@ class TrackBox extends CacheMap {
913
911
  this.clearScrollDirectionCache();
914
912
  }
915
913
  }
914
+ changes() {
915
+ this.bumpVersion();
916
+ this.fireChange();
917
+ }
916
918
  generateDisplayCollection(items, stickyMap, metrics) {
917
919
  const { normalizedItemWidth, normalizedItemHeight, dynamicSize, itemsFromStartToScrollEnd, isVertical, renderItems: renderItemsLength, scrollSize, sizeProperty, snap, snippedPos, startPosition, totalLength, startIndex, typicalItemSize, } = metrics, displayItems = [];
918
920
  if (items.length) {
@@ -1084,7 +1086,7 @@ class ScrollEvent {
1084
1086
  * Virtual list component.
1085
1087
  * Maximum performance for extremely large lists.
1086
1088
  * It is based on algorithms for virtualization of screen objects.
1087
- * @link https://github.com/DjonnyX/ng-virtual-list/blob/16.x/projects/ng-virtual-list/src/lib/ng-virtual-list.component.ts
1089
+ * @link https://github.com/DjonnyX/ng-virtual-list/blob/15.x/projects/ng-virtual-list/src/lib/ng-virtual-list.component.ts
1088
1090
  * @author Evgenii Grebennikov
1089
1091
  * @email djonnyx@gmail.com
1090
1092
  */
@@ -1264,6 +1266,19 @@ class NgVirtualListComponent {
1264
1266
  }
1265
1267
  ;
1266
1268
  get itemsOffset() { return this._$itemsOffset.getValue(); }
1269
+ _$trackBy = new BehaviorSubject(TRACK_BY_PROPERTY_NAME);
1270
+ $trackBy = this._$trackBy.asObservable();
1271
+ /**
1272
+ * The name of the property by which tracking is performed
1273
+ */
1274
+ set trackBy(v) {
1275
+ if (this._$trackBy.getValue() === v) {
1276
+ return;
1277
+ }
1278
+ this._$trackBy.next(v);
1279
+ }
1280
+ ;
1281
+ get trackBy() { return this._$trackBy.getValue(); }
1267
1282
  _isVertical = this.getIsVertical();
1268
1283
  _displayComponents = [];
1269
1284
  _$bounds = new BehaviorSubject(null);
@@ -1371,7 +1386,7 @@ class NgVirtualListComponent {
1371
1386
  /**
1372
1387
  * Dictionary of element sizes by their id
1373
1388
  */
1374
- _trackBox = new TrackBox(TRACK_BY_PROPERTY_NAME);
1389
+ _trackBox = new TrackBox(this.trackBy);
1375
1390
  _onTrackBoxChangeHandler = (v) => {
1376
1391
  this._$cacheVersion.next(v);
1377
1392
  };
@@ -1386,6 +1401,10 @@ class NgVirtualListComponent {
1386
1401
  this._$initialized = new BehaviorSubject(false);
1387
1402
  this.$initialized = this._$initialized.asObservable();
1388
1403
  this._trackBox.displayComponents = this._displayComponents;
1404
+ const $trackBy = this.$trackBy;
1405
+ $trackBy.pipe(takeUntilDestroyed(), tap(v => {
1406
+ this._trackBox.trackingPropertyName = v;
1407
+ })).subscribe();
1389
1408
  const $bounds = this._$bounds.asObservable().pipe(filter(b => !!b)), $items = this.$items.pipe(map(i => !i ? [] : i)), $scrollSize = this._$scrollSize.asObservable(), $itemSize = this.$itemSize.pipe(map(v => v <= 0 ? DEFAULT_ITEM_SIZE : v)), $itemsOffset = this.$itemsOffset.pipe(map(v => v < 0 ? DEFAULT_ITEMS_OFFSET : v)), $stickyMap = this.$stickyMap.pipe(map(v => !v ? {} : v)), $snap = this.$snap, $snapToItem = this.$snapToItem, $isVertical = this.$direction.pipe(map(v => this.getIsVertical(v || DEFAULT_DIRECTION))), $dynamicSize = this.$dynamicSize, $enabledBufferOptimization = this.$enabledBufferOptimization, $cacheVersion = this.$cacheVersion;
1390
1409
  $isVertical.pipe(takeUntilDestroyed(), tap(v => {
1391
1410
  this._isVertical = v;
@@ -1414,11 +1433,14 @@ class NgVirtualListComponent {
1414
1433
  if (!this.isScrolling && dynamicSize && container) {
1415
1434
  actualScrollSize = scrollSize + delta;
1416
1435
  if (snapToItem) {
1417
- // etc
1436
+ const targetItem = this._trackBox.getNearestItem(actualScrollSize, items, itemSize, isVertical);
1437
+ if (targetItem) {
1438
+ this.scrollTo(targetItem.id, BEHAVIOR_INSTANT);
1439
+ }
1418
1440
  }
1419
1441
  else if (scrollSize !== actualScrollSize) {
1420
1442
  const params = {
1421
- [this._isVertical ? TOP_PROP_NAME : LEFT_PROP_NAME]: actualScrollSize,
1443
+ [isVertical ? TOP_PROP_NAME : LEFT_PROP_NAME]: actualScrollSize,
1422
1444
  behavior: BEHAVIOR_INSTANT
1423
1445
  };
1424
1446
  this.scrollImmediately(container, params);
@@ -1450,6 +1472,9 @@ class NgVirtualListComponent {
1450
1472
  const dir = d || this.direction;
1451
1473
  return isDirection(dir, Directions.VERTICAL);
1452
1474
  }
1475
+ _componentsResizeObserver = new ResizeObserver(() => {
1476
+ this._trackBox.changes();
1477
+ });
1453
1478
  createDisplayComponentsIfNeed(displayItems) {
1454
1479
  if (!displayItems || !this._listContainerRef) {
1455
1480
  this._trackBox.setDisplayObjectIndexMapById({});
@@ -1461,15 +1486,19 @@ class NgVirtualListComponent {
1461
1486
  if (_listContainerRef) {
1462
1487
  const comp = _listContainerRef.createComponent(NgVirtualListItemComponent);
1463
1488
  this._displayComponents.push(comp);
1489
+ this._componentsResizeObserver.observe(comp.instance.element);
1464
1490
  }
1465
1491
  }
1466
1492
  const maxLength = displayItems.length;
1467
1493
  while (this._displayComponents.length > maxLength) {
1468
1494
  const comp = this._displayComponents.pop();
1469
- comp?.destroy();
1470
- const id = comp?.instance.item?.id;
1471
- if (id !== undefined) {
1472
- this._trackBox.untrackComponentByIdProperty(comp?.instance);
1495
+ if (comp) {
1496
+ this._componentsResizeObserver.unobserve(comp.instance.element);
1497
+ comp.destroy();
1498
+ const id = comp?.instance.item?.id;
1499
+ if (id !== undefined) {
1500
+ this._trackBox.untrackComponentByIdProperty(comp?.instance);
1501
+ }
1473
1502
  }
1474
1503
  }
1475
1504
  this.resetRenderers();
@@ -1620,15 +1649,18 @@ class NgVirtualListComponent {
1620
1649
  if (this._isScrollingDebounces) {
1621
1650
  this._isScrollingDebounces.dispose();
1622
1651
  }
1652
+ if (this._componentsResizeObserver) {
1653
+ this._componentsResizeObserver.disconnect();
1654
+ }
1655
+ if (this._resizeObserver) {
1656
+ this._resizeObserver.disconnect();
1657
+ }
1623
1658
  const containerEl = this._container;
1624
1659
  if (containerEl) {
1625
1660
  containerEl.nativeElement.removeEventListener(SCROLL, this._onScrollHandler);
1626
1661
  containerEl.nativeElement.removeEventListener(SCROLL_END, this._onScrollEndHandler);
1627
1662
  containerEl.nativeElement.removeEventListener(SCROLL, this._onContainerScrollHandler);
1628
1663
  containerEl.nativeElement.removeEventListener(SCROLL_END, this._onContainerScrollEndHandler);
1629
- if (this._resizeObserver) {
1630
- this._resizeObserver.unobserve(containerEl.nativeElement);
1631
- }
1632
1664
  }
1633
1665
  if (this._displayComponents) {
1634
1666
  while (this._displayComponents.length > 0) {
@@ -1638,7 +1670,7 @@ class NgVirtualListComponent {
1638
1670
  }
1639
1671
  }
1640
1672
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NgVirtualListComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
1641
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: NgVirtualListComponent, selector: "ng-virtual-list", inputs: { items: "items", snap: "snap", snapToItem: "snapToItem", enabledBufferOptimization: "enabledBufferOptimization", itemRenderer: "itemRenderer", stickyMap: "stickyMap", itemSize: "itemSize", dynamicSize: "dynamicSize", direction: "direction", itemsOffset: "itemsOffset" }, outputs: { onScroll: "onScroll", onScrollEnd: "onScrollEnd" }, viewQueries: [{ propertyName: "_listContainerRef", first: true, predicate: ["renderersContainer"], descendants: true, read: ViewContainerRef }, { propertyName: "_container", first: true, predicate: ["container"], descendants: true, read: (ElementRef) }, { propertyName: "_list", first: true, predicate: ["list"], descendants: true, read: (ElementRef) }], ngImport: i0, template: "<div #container part=\"scroller\" class=\"ngvl__container\">\r\n <ul #list part=\"list\" class=\"ngvl__list\">\r\n <ng-container #renderersContainer></ng-container>\r\n </ul>\r\n</div>", styles: [":host{display:block;width:400px;overflow:hidden}:host(.horizontal){height:48px}:host(.vertical){height:320px}.ngvl__container{overflow:auto;width:100%;height:100%}.ngvl__list{position:relative;list-style:none;padding:0;margin:0;width:100%;height:100%}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.ShadowDom });
1673
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: NgVirtualListComponent, selector: "ng-virtual-list", inputs: { items: "items", snap: "snap", snapToItem: "snapToItem", enabledBufferOptimization: "enabledBufferOptimization", itemRenderer: "itemRenderer", stickyMap: "stickyMap", itemSize: "itemSize", dynamicSize: "dynamicSize", direction: "direction", itemsOffset: "itemsOffset", trackBy: "trackBy" }, outputs: { onScroll: "onScroll", onScrollEnd: "onScrollEnd" }, viewQueries: [{ propertyName: "_listContainerRef", first: true, predicate: ["renderersContainer"], descendants: true, read: ViewContainerRef }, { propertyName: "_container", first: true, predicate: ["container"], descendants: true, read: (ElementRef) }, { propertyName: "_list", first: true, predicate: ["list"], descendants: true, read: (ElementRef) }], ngImport: i0, template: "<div #container part=\"scroller\" class=\"ngvl__container\">\r\n <ul #list part=\"list\" class=\"ngvl__list\">\r\n <ng-container #renderersContainer></ng-container>\r\n </ul>\r\n</div>", styles: [":host{display:block;width:400px;overflow:hidden}:host(.horizontal){height:48px}:host(.vertical){height:320px}.ngvl__container{overflow:auto;width:100%;height:100%}.ngvl__list{position:relative;list-style:none;padding:0;margin:0;width:100%;height:100%}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.ShadowDom });
1642
1674
  }
1643
1675
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NgVirtualListComponent, decorators: [{
1644
1676
  type: Component,
@@ -1676,6 +1708,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
1676
1708
  type: Input
1677
1709
  }], itemsOffset: [{
1678
1710
  type: Input
1711
+ }], trackBy: [{
1712
+ type: Input
1679
1713
  }] } });
1680
1714
 
1681
1715
  class NgVirtualListModule {