disable syncing once synced
This commit is contained in:
parent
a1beff806b
commit
5c2d2c8cf0
3 changed files with 60 additions and 50 deletions
|
|
@ -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...",
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue