mirror of
https://github.com/Comfy-Org/ComfyUI_frontend.git
synced 2026-02-03 06:47:33 +00:00
## Summary Adds the linter, turns on the recommended and a few extra rules, fixes existing violations. Doesn't prohibit `../../...` imports yet, that'll be it's own PR. ## Changes - **What**: Consistent and fixable imports - **Dependencies**: The plugin and parser ## Review Focus How do you feel about the recommended rules? What about the extra ones? [Any more](https://github.com/un-ts/eslint-plugin-import-x?tab=readme-ov-file#rules) you'd want to turn on? ┆Issue is synchronized with this [Notion page](https://www.notion.so/PR-5955-Lint-Add-eslint-import-plugin-2856d73d3650819985c0fb9ca3fa94b0) by [Unito](https://www.unito.io)
61 lines
1.3 KiB
TypeScript
61 lines
1.3 KiB
TypeScript
import { onBeforeUnmount, ref, watch } from 'vue'
|
|
import type { Ref } from 'vue'
|
|
|
|
interface UseIntersectionObserverOptions extends IntersectionObserverInit {
|
|
immediate?: boolean
|
|
}
|
|
|
|
export function useIntersectionObserver(
|
|
target: Ref<Element | null>,
|
|
callback: IntersectionObserverCallback,
|
|
options: UseIntersectionObserverOptions = {}
|
|
) {
|
|
const { immediate = true, ...observerOptions } = options
|
|
|
|
const isSupported =
|
|
typeof window !== 'undefined' && 'IntersectionObserver' in window
|
|
const isIntersecting = ref(false)
|
|
|
|
let observer: IntersectionObserver | null = null
|
|
|
|
const cleanup = () => {
|
|
if (observer) {
|
|
observer.disconnect()
|
|
observer = null
|
|
}
|
|
}
|
|
|
|
const observe = () => {
|
|
cleanup()
|
|
|
|
if (!isSupported || !target.value) return
|
|
|
|
observer = new IntersectionObserver((entries) => {
|
|
isIntersecting.value = entries.some((entry) => entry.isIntersecting)
|
|
callback(entries, observer!)
|
|
}, observerOptions)
|
|
|
|
observer.observe(target.value)
|
|
}
|
|
|
|
const unobserve = () => {
|
|
if (observer && target.value) {
|
|
observer.unobserve(target.value)
|
|
}
|
|
}
|
|
|
|
if (immediate) {
|
|
watch(target, observe, { immediate: true, flush: 'post' })
|
|
}
|
|
|
|
onBeforeUnmount(cleanup)
|
|
|
|
return {
|
|
isSupported,
|
|
isIntersecting,
|
|
observe,
|
|
unobserve,
|
|
cleanup
|
|
}
|
|
}
|