0.2.0 • Published 8 months ago
svelte-instantdb v0.2.0
svelte-instantdb
Unofficial Instant SDK for Svelte.
!NOTE Using Svelte 4? Proceed to this example using stores.
Installation
npm install svelte-instantdb
Usage
Reading and Writing Data
<script>
import { init, tx, id } from 'svelte-instantdb';
const db = init({
appId: '__YOUR_APP_ID__'
});
const query = db.useQuery({ messages: {} });
const addMessage = (message) => {
db.transact(tx.messages[id()].update(message));
};
</script>
{#if query.isLoading}
<div>Fetching data...</div>
{:else if query.error}
<div>Error fetching data: {query.error.message}</div>
{:else}
<UI data={query.data} {addMessage} />
{/if}
Cursors
<Cursors {room} userCursorColor="tomato">Move your cursor around! ✨</Cursors>
Custom cursors
<Cursors {room} userCursorColor="tomato">
Move your cursor around! ✨
{#snippet cursor({ color, presence })}
<CustomCursor {color} name={presence.name} />
{/snippet}
</Cursors>
Typing indicator
<script lang="ts">
// Init schema and db
// ...
const room = db.room('chat', 'main');
// 1. Publish your presence in the room
const presence = room.usePresence({
peers: [],
user: false
});
onMount(() => {
presence.publishPresence({ name: 'your_username' });
});
// 2. Use the typing indicator
const typing = room.useTypingIndicator('chat');
function typingInfo(users) {
if (users.length === 0) return null;
if (users.length === 1) return `${users[0].name} is typing...`;
if (users.length === 2) return `${users[0].name} and ${users[1].name} are typing...`;
return `${users[0].name} and ${users.length - 1} others are typing...`;
}
</script>
<div class="flex h-screen gap-3 p-2">
<div class="flex flex-1 flex-col justify-end">
<textarea
{...typing.inputProps}
placeholder="Compose your message here..."
class="w-full rounded-md border-gray-300 p-2 text-sm"
/>
<div class="truncate text-xs text-gray-500">
{typing.active.length ? typingInfo(typing.active) : <> </>}
</div>
</div>
</div>
Reactive variables
To make functions return reactive state, pass a function that returns a state instead:
let todoId = $state(null);
const todoState = db.useQuery(() =>
todoId
? {
todos: {
$: {
where: {
id: todoId
}
}
}
}
: null
);
todoId = 'some_id';
License
MIT
0.2.0
8 months ago
0.1.8
8 months ago
0.1.7
8 months ago
0.1.6
9 months ago
0.1.5
9 months ago
0.1.4
9 months ago
0.1.3
9 months ago
0.1.2
10 months ago
0.1.1
10 months ago
0.1.0
10 months ago
0.0.11
10 months ago
0.0.10
10 months ago
0.0.9
10 months ago
0.0.8
10 months ago
0.0.7
10 months ago
0.0.6
10 months ago
0.0.5
10 months ago
0.0.4
10 months ago
0.0.3
10 months ago
0.0.2
10 months ago