{"version":3,"file":"useHeights.cjs","sources":["../../../../../../../packages/vue-components/vc-virtual-list/src/hooks/useHeights.tsx"],"sourcesContent":["import type { Ref, ShallowRef, VNodeProps } from 'vue';\nimport type { GetKey } from '../interface';\nimport { raf } from '@antdv/utils';\nimport { onUnmounted, ref, watch } from 'vue';\n\nexport type CacheMap = Map<any, number>;\n\nexport default function useHeights<T>(\n  mergedData: ShallowRef<any[]>,\n  getKey: GetKey<T>,\n  onItemAdd?: ((item: T) => void) | null,\n  onItemRemove?: ((item: T) => void) | null,\n): [(item: T, instance: HTMLElement) => void, () => void, CacheMap, Ref<symbol>] {\n  const instance = new Map<VNodeProps['key'], HTMLElement>();\n  const heights = new Map();\n  const updatedMark = ref(Symbol('update'));\n  watch(mergedData, () => {\n    updatedMark.value = Symbol('update');\n  });\n  let collectRaf: number;\n\n  function cancelRaf() {\n    raf.cancel(collectRaf);\n  }\n  function collectHeight() {\n    cancelRaf();\n    collectRaf = raf(() => {\n      instance.forEach((element, key) => {\n        if (element && element.offsetParent) {\n          const { offsetHeight } = element;\n          if (heights.get(key) !== offsetHeight) {\n            // changed = true;\n            updatedMark.value = Symbol('update');\n            heights.set(key, element.offsetHeight);\n          }\n        }\n      });\n    });\n  }\n\n  function setInstance(item: T, ins: HTMLElement) {\n    const key = getKey(item);\n    const origin = instance.get(key);\n\n    if (ins) {\n      instance.set(key, (ins as any).$el || ins);\n      collectHeight();\n    } else {\n      instance.delete(key);\n    }\n\n    // Instance changed\n    if (!origin !== !ins) {\n      if (ins)\n        onItemAdd?.(item);\n      else\n        onItemRemove?.(item);\n    }\n  }\n  onUnmounted(() => {\n    cancelRaf();\n  });\n\n  return [setInstance, collectHeight, heights, updatedMark];\n}\n"],"names":["useHeights","mergedData","getKey","onItemAdd","onItemRemove","instance","Map","heights","updatedMark","ref","Symbol","watch","value","collectRaf","cancelRaf","raf","cancel","collectHeight","forEach","element","key","offsetParent","offsetHeight","get","set","setInstance","item","ins","origin","$el","delete","onUnmounted"],"mappings":";;;;;;;;AAOA,SAAwBA,UACtBC,CAAAA,UAAAA,EACAC,MACAC,EAAAA,SAAAA,EACAC,YAC+E,EAAA;AAC/E,EAAMC,MAAAA,QAAAA,uBAAeC,GAAoC,EAAA,CAAA;AACzD,EAAMC,MAAAA,OAAAA,uBAAcD,GAAI,EAAA,CAAA;AACxB,EAAA,MAAME,WAAcC,GAAAA,OAAAA,CAAIC,MAAO,CAAA,QAAQ,CAAC,CAAA,CAAA;AACxCC,EAAAA,SAAAA,CAAMV,YAAY,MAAM;AACtBO,IAAYI,WAAAA,CAAAA,KAAAA,GAAQF,OAAO,QAAQ,CAAA,CAAA;AAAA,GACpC,CAAA,CAAA;AACD,EAAIG,IAAAA,UAAAA,CAAAA;AAEJ,EAAA,SAASC,SAAY,GAAA;AACnBC,IAAAA,OAAAA,CAAIC,OAAOH,UAAU,CAAA,CAAA;AAAA,GACvB;AACA,EAAA,SAASI,aAAgB,GAAA;AACvBH,IAAU,SAAA,EAAA,CAAA;AACVD,IAAAA,UAAAA,GAAaE,QAAI,MAAM;AACrBV,MAASa,QAAAA,CAAAA,OAAAA,CAAQ,CAACC,OAAAA,EAASC,GAAQ,KAAA;AACjC,QAAID,IAAAA,OAAAA,IAAWA,QAAQE,YAAc,EAAA;AACnC,UAAM,MAAA;AAAA,YAAEC,YAAAA;AAAAA,WAAiBH,GAAAA,OAAAA,CAAAA;AACzB,UAAA,IAAIZ,OAAQgB,CAAAA,GAAAA,CAAIH,GAAG,CAAA,KAAME,YAAc,EAAA;AAErCd,YAAYI,WAAAA,CAAAA,KAAAA,GAAQF,OAAO,QAAQ,CAAA,CAAA;AACnCH,YAAQiB,OAAAA,CAAAA,GAAAA,CAAIJ,GAAKD,EAAAA,OAAAA,CAAQG,YAAY,CAAA,CAAA;AAAA,WACvC;AAAA,SACF;AAAA,OACD,CAAA,CAAA;AAAA,KACF,CAAA,CAAA;AAAA,GACH;AAEA,EAASG,SAAAA,WAAAA,CAAYC,MAASC,GAAkB,EAAA;AAC9C,IAAMP,MAAAA,GAAAA,GAAMlB,OAAOwB,IAAI,CAAA,CAAA;AACvB,IAAME,MAAAA,MAAAA,GAASvB,QAASkB,CAAAA,GAAAA,CAAIH,GAAG,CAAA,CAAA;AAE/B,IAAA,IAAIO,GAAK,EAAA;AACPtB,MAAAA,QAAAA,CAASmB,GAAIJ,CAAAA,GAAAA,EAAMO,GAAYE,CAAAA,GAAAA,IAAOF,GAAG,CAAA,CAAA;AACzCV,MAAc,aAAA,EAAA,CAAA;AAAA,KACT,MAAA;AACLZ,MAAAA,QAAAA,CAASyB,OAAOV,GAAG,CAAA,CAAA;AAAA,KACrB;AAGA,IAAI,IAAA,CAACQ,MAAW,KAAA,CAACD,GAAK,EAAA;AACpB,MAAIA,IAAAA,GAAAA;AACFxB,QAAYuB,SAAAA,IAAAA,IAAAA,GAAAA,KAAAA,CAAAA,GAAAA,SAAAA,CAAAA,IAAAA,CAAAA,CAAAA;AAAAA;AAEZtB,QAAesB,YAAAA,IAAAA,IAAAA,GAAAA,KAAAA,CAAAA,GAAAA,YAAAA,CAAAA,IAAAA,CAAAA,CAAAA;AAAAA,KACnB;AAAA,GACF;AACAK,EAAAA,eAAAA,CAAY,MAAM;AAChBjB,IAAU,SAAA,EAAA,CAAA;AAAA,GACX,CAAA,CAAA;AAED,EAAA,OAAO,CAACW,WAAAA,EAAaR,aAAeV,EAAAA,OAAAA,EAASC,WAAW,CAAA,CAAA;AAC1D;;;;"}