Skip to content

⬅️ Back to Table of Contents

📄 index.ts

📊 Analysis Summary

Metric Count
🔧 Functions 2
📦 Imports 9
📊 Variables & Constants 1
🟢 Vue Composition API 3
📐 Interfaces 1
📑 Type Aliases 2

📚 Table of Contents

🛠️ File Location:

📂 packages/integrations/useFuse/index.ts

📦 Imports

Name Source
FuseResult fuse.js
IFuseOptions fuse.js
ComputedRef vue
MaybeRefOrGetter vue
Fuse fuse.js
computed vue
deepRef vue
toValue vue
watch vue

Variables & Constants

Name Type Kind Value Exported
limit any const resolved?.resultLimit

Vue Composition API

Name Type Reactive Variables Composables
watch watch none none
watch watch none none
computed computed none none

Functions

useFuse(search: MaybeRefOrGetter<string>, data: MaybeRefOrGetter<DataItem[]>, options: MaybeRefOrGetter<UseFuseOptions<DataItem>>): { fuse: any; results: ComputedRef<FuseResult<DataItem>[]>; }

Code
export function useFuse<DataItem>(
  search: MaybeRefOrGetter<string>,
  data: MaybeRefOrGetter<DataItem[]>,
  options?: MaybeRefOrGetter<UseFuseOptions<DataItem>>,
) {
  const createFuse = () => {
    return new Fuse(
      toValue(data) ?? [],
      toValue(options)?.fuseOptions,
    )
  }

  const fuse = deepRef(createFuse())

  watch(
    () => toValue(options)?.fuseOptions,
    () => { fuse.value = createFuse() },
    { deep: true },
  )

  watch(
    () => toValue(data),
    (newData) => { fuse.value.setCollection(newData) },
    { deep: true },
  )

  const results: ComputedRef<FuseResult<DataItem>[]> = computed(() => {
    const resolved = toValue(options)
    // This will also be recomputed when `data` changes, as it causes a change
    // to the Fuse instance, which is tracked here.
    if (resolved?.matchAllWhenSearchEmpty && !toValue(search))
      return toValue(data).map((item, index) => ({ item, refIndex: index }))

    const limit = resolved?.resultLimit
    return fuse.value.search(toValue(search), (limit ? { limit } : undefined))
  })

  return {
    fuse,
    results,
  }
}
  • Parameters:
  • search: MaybeRefOrGetter<string>
  • data: MaybeRefOrGetter<DataItem[]>
  • options: MaybeRefOrGetter<UseFuseOptions<DataItem>>
  • Return Type: { fuse: any; results: ComputedRef<FuseResult<DataItem>[]>; }
  • Calls:
  • toValue (from vue)
  • deepRef (from vue)
  • createFuse
  • watch (from vue)
  • fuse.value.setCollection
  • computed (from vue)
  • toValue(data).map
  • fuse.value.search
  • Internal Comments:
    // This will also be recomputed when `data` changes, as it causes a change
    // to the Fuse instance, which is tracked here.
    

createFuse(): any

Code
() => {
    return new Fuse(
      toValue(data) ?? [],
      toValue(options)?.fuseOptions,
    )
  }
  • Return Type: any
  • Calls:
  • toValue (from vue)

Interfaces

UseFuseOptions<T>

Interface Code
export interface UseFuseOptions<T> {
  fuseOptions?: FuseOptions<T>
  resultLimit?: number
  matchAllWhenSearchEmpty?: boolean
}

Properties

Name Type Optional Description
fuseOptions FuseOptions<T>
resultLimit number
matchAllWhenSearchEmpty boolean

Type Aliases

FuseOptions<T>

type FuseOptions<T> = IFuseOptions<T>;

UseFuseReturn

type UseFuseReturn = ReturnType<typeof useFuse>;