disable syncing once synced

This commit is contained in:
Daniel Bulant 2026-05-01 18:40:36 +02:00
parent a1beff806b
commit 5c2d2c8cf0
No known key found for this signature in database
3 changed files with 60 additions and 50 deletions

View file

@ -1,21 +1,29 @@
import { client } from "#/lib/eden";
import { toast } from "sonner";
import { Button } from "./ui/button";
import { useQueryClient } from "@tanstack/react-query"; import { useQueryClient } from "@tanstack/react-query";
import { useState } from "react";
import { toast } from "sonner";
import { client } from "#/lib/eden";
import { Button } from "./ui/button";
import { Item, ItemActions, ItemDescription, ItemTitle } from "./ui/item"; import { Item, ItemActions, ItemDescription, ItemTitle } from "./ui/item";
export function SyncButton() { export function SyncButton() {
const query = useQueryClient(); const query = useQueryClient();
const [syncing, setSyncing] = useState(false);
return ( return (
<Item className="px-0 justify-between"> <Item className="px-0 justify-between">
<ItemDescription>Sync your data</ItemDescription> <ItemDescription>Sync your data</ItemDescription>
<ItemActions> <ItemActions>
<Button <Button
disabled={syncing}
onClick={async () => { onClick={async () => {
toast.promise( toast.promise(
(async () => { (async () => {
setSyncing(true);
try {
await client.api.sync.post(); await client.api.sync.post();
} finally {
setSyncing(false);
query.invalidateQueries(); query.invalidateQueries();
}
})(), })(),
{ {
loading: "Syncing...", loading: "Syncing...",

View file

@ -1,5 +1,5 @@
import { authClient } from "#/lib/auth-client";
import type { AuthSession } from "#/lib/auth.serverfn"; import type { AuthSession } from "#/lib/auth.serverfn";
import { authClient } from "#/lib/auth-client";
import { Route } from "#/routes/__root"; import { Route } from "#/routes/__root";
interface UserData { interface UserData {
@ -17,5 +17,5 @@ export function useUser() {
null) as AuthSession["session"] | null; null) as AuthSession["session"] | null;
const user = clientSession?.user ?? routeContext.session?.user ?? null; const user = clientSession?.user ?? routeContext.session?.user ?? null;
const isLoading = !routeContext.session && isClientSessionPending; const isLoading = !routeContext.session && isClientSessionPending;
return { user, session, isLoading } satisfies UserData; return { user, session, isLoading } as UserData;
} }

View file

@ -1,17 +1,19 @@
import { createFileRoute } from "@tanstack/react-router";
import { PartyQr } from "#/components/party-qr";
import { SyncButton } from "#/components/sync-button"; import { SyncButton } from "#/components/sync-button";
import { MainContent } from "#/components/ui/main-content"; import { MainContent } from "#/components/ui/main-content";
import { UserInfo } from "#/components/user-info"; import { UserInfo } from "#/components/user-info";
import { PartyQr } from "#/components/party-qr"; import { useUser } from "#/hooks/user";
import { createFileRoute } from "@tanstack/react-router";
export const Route = createFileRoute("/")({ component: App }); export const Route = createFileRoute("/")({ component: App });
function App() { function App() {
const { user } = useUser();
return ( return (
<MainContent> <MainContent>
<UserInfo /> <UserInfo />
<SyncButton /> {!user?.lastSyncAt && <SyncButton />}
<PartyQr /> {user && <PartyQr />}
</MainContent> </MainContent>
); );
} }