0.0.5 • Published 9 months ago

@kylemathews/sync v0.0.5

Weekly downloads
-
License
MIT
Repository
-
Last release
9 months ago

sync

Sync in data, mutate the data, sync back the changes

Features

Preloading Collections

The preloadCollection function allows you to preload data for collections before rendering routes or components. This is useful when you want to ensure that data is available immediately when a component renders, improving the user experience by preventing loading states.

// collections/users.ts - Shared collection configuration
import { CollectionConfig } from '@kylemathews/sync';

// Create a cached configuration for the users collection
export const usersCollectionConfig: CollectionConfig = {
  id: 'users',
  sync: {
    id: 'users-sync',
    sync: ({ begin, write, commit }) => {
      // Your sync implementation
      // ...
    }
  },
  mutationFn: {
    persist: async () => {
      // Your mutation implementation
      // ...
    }
    awaitSync: async () => {
      // Your awaitSync implementation
      // ...
    }
  }
};

// routes/users.ts - Route loader
import { preloadCollection } from '@kylemathews/sync';
import { usersCollectionConfig } from '../collections/users';

export async function loader() {
  // Preload the collection data using the shared cached config
  await preloadCollection(usersCollectionConfig);
  return null;
}

// components/Users.tsx - Component using the collection
import { useCollection } from '@kylemathews/sync';
import { usersCollectionConfig } from '../collections/users';

export function UsersComponent() {
  // Uses the same cached collection config, ensuring consistency
  const { data } = useCollection(usersCollectionConfig);
  
  // Data is already loaded, no need for loading states
  return (
    <div>
      <h1>Users</h1>
      <ul>
        {Array.from(data.values()).map(user => (
          <li key={user.id}>{user.name}</li>
        ))}
      </ul>
    </div>
  );
}

When you call preloadCollection, it: 1. Returns a promise that resolves once the initial sync is complete 2. Makes the data immediately available to any useCollection hooks with the same ID 3. Ensures that duplicate calls with the same ID return the same promise

This allows route transitions to pause until needed data is loaded, creating a smoother user experience.

0.0.5

9 months ago

0.0.4

9 months ago

0.0.3

9 months ago

0.0.2

9 months ago

0.0.1

9 months ago