{"version":3,"file":"CgGD9Yy3.js","sources":["../../../../composables/infinite-scroll.ts"],"sourcesContent":["import { unref, watch, ref } from 'vue';\nimport { useElementVisibility } from '@vueuse/core';\n\ntype UriType = string | (() => string);\nexport const useInfiniteScroll = (target, uri: UriType, toWatch: any[] = [], size = 12) => {\n const items = ref([]);\n const page = ref(undefined);\n const next = ref(undefined);\n const pending = ref(false);\n const error = ref(undefined);\n\n const targetIsVisible = useElementVisibility(target);\n\n const createUri = () => {\n let finalUri: string;\n if (typeof uri === 'function') {\n finalUri = uri();\n } else {\n finalUri = uri;\n }\n const urlObject = new URL(finalUri);\n const searchParams = new URLSearchParams(urlObject.search);\n if (page.value) {\n searchParams.set('page', String(page.value));\n }\n searchParams.set('size', String(size));\n\n urlObject.search = searchParams.toString();\n return urlObject.toString();\n };\n\n const handleData = (newData, shouldReplace) => {\n if (!newData) {\n return;\n }\n next.value = newData.next;\n\n const check = new Set();\n const existingValues = shouldReplace ? [] : items.value;\n items.value = [...existingValues, ...newData.items].filter((obj) => !check.has(obj.id) && check.add(obj.id));\n };\n\n const fetch = async (shouldReplace) => {\n try {\n pending.value = true;\n const data = await $fetch(createUri());\n handleData(data, shouldReplace);\n } catch (e) {\n console.log('Failed to fetch', e);\n error.value = e;\n }\n pending.value = false;\n };\n // deliberately not await, to allow lazy loading\n fetch(true);\n\n watch([page, ...toWatch], ([newPage], [oldPage]) => {\n let shouldReplace = false;\n if (newPage === oldPage) {\n page.value = undefined;\n next.value = undefined;\n shouldReplace = true;\n }\n\n fetch(shouldReplace);\n });\n\n watch(\n () => ({ visible: targetIsVisible.value, nftLength: items.value.length }),\n ({ visible }) => {\n const unrefTarget = unref(target) as HTMLElement;\n if (visible && unrefTarget) {\n const rect = unrefTarget.getBoundingClientRect();\n const realVisible =\n rect.top <= (window.innerHeight || document.documentElement.clientHeight) &&\n rect.left <= (window.innerWidth || document.documentElement.clientWidth) &&\n rect.bottom >= 0 &&\n rect.right >= 0;\n if (realVisible && next.value) {\n page.value = next.value;\n next.value = undefined;\n }\n }\n }\n );\n\n return { items, pending };\n};\n"],"names":["useInfiniteScroll","target","uri","toWatch","size","items","ref","page","next","pending","error","targetIsVisible","useElementVisibility","createUri","finalUri","urlObject","searchParams","handleData","newData","shouldReplace","check","existingValues","obj","fetch","data","watch","newPage","oldPage","visible","unrefTarget","unref","rect"],"mappings":"kFAIa,MAAAA,EAAoB,CAACC,EAAQC,EAAcC,EAAiB,CAAC,EAAGC,EAAO,KAAO,CACnF,MAAAC,EAAQC,EAAI,CAAA,CAAE,EACdC,EAAOD,EAAI,MAAS,EACpBE,EAAOF,EAAI,MAAS,EACpBG,EAAUH,EAAI,EAAK,EACnBI,EAAQJ,EAAI,MAAS,EAErBK,EAAkBC,EAAqBX,CAAM,EAE7CY,EAAY,IAAM,CAClB,IAAAC,EACA,OAAOZ,GAAQ,WACjBY,EAAWZ,EAAI,EAEJY,EAAAZ,EAEP,MAAAa,EAAY,IAAI,IAAID,CAAQ,EAC5BE,EAAe,IAAI,gBAAgBD,EAAU,MAAM,EACzD,OAAIR,EAAK,OACPS,EAAa,IAAI,OAAQ,OAAOT,EAAK,KAAK,CAAC,EAE7CS,EAAa,IAAI,OAAQ,OAAOZ,CAAI,CAAC,EAE3BW,EAAA,OAASC,EAAa,WACzBD,EAAU,UAAS,EAGtBE,EAAa,CAACC,EAASC,IAAkB,CAC7C,GAAI,CAACD,EACH,OAEFV,EAAK,MAAQU,EAAQ,KAEf,MAAAE,MAAY,IACZC,EAAiBF,EAAgB,GAAKd,EAAM,MAC5CA,EAAA,MAAQ,CAAC,GAAGgB,EAAgB,GAAGH,EAAQ,KAAK,EAAE,OAAQI,GAAQ,CAACF,EAAM,IAAIE,EAAI,EAAE,GAAKF,EAAM,IAAIE,EAAI,EAAE,CAAC,CAAA,EAGvGC,EAAQ,MAAOJ,GAAkB,CACjC,GAAA,CACFV,EAAQ,MAAQ,GAChB,MAAMe,EAAO,MAAM,OAAOX,EAAW,CAAA,EACrCI,EAAWO,EAAML,CAAa,QACvB,EAAG,CACF,QAAA,IAAI,kBAAmB,CAAC,EAChCT,EAAM,MAAQ,CAChB,CACAD,EAAQ,MAAQ,EAAA,EAGlB,OAAAc,EAAM,EAAI,EAEJE,EAAA,CAAClB,EAAM,GAAGJ,CAAO,EAAG,CAAC,CAACuB,CAAO,EAAG,CAACC,CAAO,IAAM,CAClD,IAAIR,EAAgB,GAChBO,IAAYC,IACdpB,EAAK,MAAQ,OACbC,EAAK,MAAQ,OACGW,EAAA,IAGlBI,EAAMJ,CAAa,CAAA,CACpB,EAEDM,EACE,KAAO,CAAE,QAASd,EAAgB,MAAO,UAAWN,EAAM,MAAM,SAChE,CAAC,CAAE,QAAAuB,CAAA,IAAc,CACT,MAAAC,EAAcC,EAAM7B,CAAM,EAChC,GAAI2B,GAAWC,EAAa,CACpB,MAAAE,EAAOF,EAAY,wBAEvBE,EAAK,MAAQ,OAAO,aAAe,SAAS,gBAAgB,eAC5DA,EAAK,OAAS,OAAO,YAAc,SAAS,gBAAgB,cAC5DA,EAAK,QAAU,GACfA,EAAK,OAAS,GACGvB,EAAK,QACtBD,EAAK,MAAQC,EAAK,MAClBA,EAAK,MAAQ,OAEjB,CACF,CAAA,EAGK,CAAE,MAAAH,EAAO,QAAAI,EAClB"}