useHeights.js 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", {
  3. value: true
  4. });
  5. exports.default = useHeights;
  6. var _vue = require("vue");
  7. function useHeights(mergedData, getKey, onItemAdd, onItemRemove) {
  8. var instance = new Map();
  9. var heights = new Map();
  10. var updatedMark = (0, _vue.ref)(Symbol('update'));
  11. (0, _vue.watch)(mergedData, function () {
  12. updatedMark.value = Symbol('update');
  13. });
  14. var heightUpdateId = 0;
  15. function collectHeight() {
  16. heightUpdateId += 1;
  17. var currentId = heightUpdateId;
  18. Promise.resolve().then(function () {
  19. // Only collect when it's latest call
  20. if (currentId !== heightUpdateId) return;
  21. // let changed = false;
  22. instance.forEach(function (element, key) {
  23. if (element && element.offsetParent) {
  24. var offsetHeight = element.offsetHeight;
  25. if (heights.get(key) !== offsetHeight) {
  26. //changed = true;
  27. updatedMark.value = Symbol('update');
  28. heights.set(key, element.offsetHeight);
  29. }
  30. }
  31. });
  32. });
  33. }
  34. function setInstance(item, ins) {
  35. var key = getKey(item);
  36. var origin = instance.get(key);
  37. if (ins) {
  38. instance.set(key, ins.$el || ins);
  39. collectHeight();
  40. } else {
  41. instance.delete(key);
  42. }
  43. // Instance changed
  44. if (!origin !== !ins) {
  45. if (ins) {
  46. onItemAdd === null || onItemAdd === void 0 ? void 0 : onItemAdd(item);
  47. } else {
  48. onItemRemove === null || onItemRemove === void 0 ? void 0 : onItemRemove(item);
  49. }
  50. }
  51. }
  52. return [setInstance, collectHeight, heights, updatedMark];
  53. }