Skip to content

Quick Start

src/snapshot.ts
import { createSnapshot } from "@lastshotlabs/snapshot";
export const snap = createSnapshot({
apiUrl: "/api",
loginPath: "/login",
homePath: "/",
});
export function Providers({ children }: { children: React.ReactNode }) {
return <snap.QueryProvider>{children}</snap.QueryProvider>;
}
import { ButtonBase, CardBase, InputControl } from "@lastshotlabs/snapshot/ui";
import { useState } from "react";
import { snap } from "../snapshot";
export function LoginPage() {
const login = snap.useLogin();
const [email, setEmail] = useState("");
const [password, setPassword] = useState("");
return (
<CardBase title="Sign in">
<form
onSubmit={(event) => {
event.preventDefault();
login.mutate({ email, password });
}}
>
<InputControl value={email} onChangeText={setEmail} type="email" />
<InputControl value={password} onChangeText={setPassword} type="password" />
<ButtonBase label="Sign in" type="submit" disabled={login.isPending} />
</form>
</CardBase>
);
}
import { createFileRoute } from "@tanstack/react-router";
import { snap } from "../snapshot";
export const Route = createFileRoute("/settings")({
...snap.protect(),
component: SettingsPage,
});