Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

svelte-virtual-infinite-list

Package Overview
Dependencies
Maintainers
1
Versions
45
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

svelte-virtual-infinite-list

  • 1.7.12
  • latest
  • Source
  • npm
  • Socket score

Version published
Maintainers
1
Created
Source

svelte-virtual-infinite-list(DEMO)

test

A virtual list component for Svelte apps. Instead of rendering all your data, <VirtuaInfinitelList> just renders the bits that are visible, keeping your page nice and light.

This library is forked and extends from @sveltejs/svelte-virtual-list, and all the basic feature of @sveltejs/svelte-virtual-list are available except default slot.

Installation

npm i svelte-virtual-infinite-list

Usage

<script lang="ts">
  import VirtualInfiniteList from 'svelte-virtual-infinite-list'
  import type { InfiniteEvent } from 'svelte-virtual-infinite-list'
  import { find } from './find'

  let things = [
    // these can be any values you like
    { name: 'one', number: 1 },
    { name: 'two', number: 2 },
    { name: 'three', number: 3 },
    // ...
    { name: 'six thousand and ninety-two', number: 6092 }
  ]

  let loading = true
  let virtualInfiniteList: VirtualInfiniteList

  async function onInitialize() {
    await virtualInfiniteList.scrollToBottom()
  }

  async function onInfinite({ detail }: InfiniteEvent) {
    if (detail.on === 'bottom') return
    loading = true

    const data = await find(30)
    things = [...data, ...things]

    loading = false
  }

  onMount(async () => {
    const data = await find(30)
    things = [...data]
    loading = false
  })

  async function scrollToIndex(item) {
    const index = things.findIndex((it) => it === item.number)
    index && await virtualInfiniteList.scrollToIndex(index)
  }
</script>

<VirtualInfiniteList
  items={things}
  {loading}
  direction="top"
  persists={30}
  uniqueKey={'number'}
  on:initialize={onInitialize}
  on:infinite={onInfinite}
  bind:this={virtualInfiniteList}
  let:item
>
  <!-- this will be rendered for each currently visible item -->
  <div slot="item">
    <p>{item.number}: {item.name}</p>
  </div>

  <!-- option -->
  <div slot="loader">
    Loading...
  </div>

  <!-- option -->
  <div slot="empty">
    Empty
  </div>
</VirtualInfiniteList>

Additional Props

NoProperty NameTypeNote
1loadingboolean-
2direction'top' or 'bottom' or 'vertical'Loading direction.
3maxItemCountPerLoadnumberDeprecated. This valiable removed @2.0.0. Use persists, please.
4persistsnumber[For direction-top infinite scroll user] Maximum number of items loaded per load. The offset after loaded may be significantly shift if the number of items that exceeds this value is loaded. Default value is 30.
5uniqueKeystringYou need to set specify one unique property like id in the item object if you want to use the scrollToIndex method. Default value is undefined.

Additional Events

NoProperty NameTypeNote
1on:initialize() => anyEmit on change items count from 0 to more over.
2on:infinite(event: InfiniteEvent) => anyEmit on scrollbar reached top or bottom.

Additional Slots

NoSlot NameNote
1itemDisplayed item
2loaderDisplayed element if loading is true
3emptyDisplayed element if items is [] and loading is false

Additional Methods

NoMethod NameTypeNote
1scrollTo(offset: number) => Promise<void>This allows you to scroll to a specific offset.
2scrollToIndex(index: number, options?: { align: 'top' | 'bottom' | 'center' }) => Promise<boolean>This allows you to scroll to a specific item using the index. Returns true if this is done.
3scrollToTop() => Promise<void>This allows you to scroll to top.
4scrollToBottom() => Promise<void>This allows you to scroll to bottom.
5reset() => Promise<void>This allows you to reset VirtualInfiniteList.
6forceRefresh() => Promise<void>This allows you to tick and render VirtualInfiniteList.

LICENSE

LIL (original)

LIL+MIT

Keywords

FAQs

Package last updated on 09 Jan 2023

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc