import { useState } from "react";
import { Pressable, Text, TextInput, View } from "react-native";
import { SafeAreaView } from "react-native-safe-area-context";
import { Link, Stack } from "expo-router";
import { LegendList } from "@legendapp/list";
import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query";
import type { RouterOutputs } from "~/utils/api";
import { trpc } from "~/utils/api";
import { authClient } from "~/utils/auth";
function PostCard(props: {
post: RouterOutputs["post"]["all"][number];
onDelete: () => void;
}) {
return (
{props.post.title}
{props.post.content}
Delete
);
}
function CreatePost() {
const queryClient = useQueryClient();
const [title, setTitle] = useState("");
const [content, setContent] = useState("");
const { mutate, error } = useMutation(
trpc.post.create.mutationOptions({
async onSuccess() {
setTitle("");
setContent("");
await queryClient.invalidateQueries(trpc.post.all.queryFilter());
},
}),
);
return (
{error?.data?.zodError?.fieldErrors.title && (
{error.data.zodError.fieldErrors.title}
)}
{error?.data?.zodError?.fieldErrors.content && (
{error.data.zodError.fieldErrors.content}
)}
{
mutate({
title,
content,
});
}}
>
Create
{error?.data?.code === "UNAUTHORIZED" && (
You need to be logged in to create a post
)}
);
}
function MobileAuth() {
const { data: session } = authClient.useSession();
return (
<>
{session?.user.name ? `Hello, ${session.user.name}` : "Not logged in"}
session
? authClient.signOut()
: authClient.signIn.social({
provider: "discord",
callbackURL: "/",
})
}
className="bg-primary flex items-center rounded-sm p-2"
>
{session ? "Sign Out" : "Sign In With Discord"}
>
);
}
export default function Index() {
const queryClient = useQueryClient();
const postQuery = useQuery(trpc.post.all.queryOptions());
const deletePostMutation = useMutation(
trpc.post.delete.mutationOptions({
onSettled: () =>
queryClient.invalidateQueries(trpc.post.all.queryFilter()),
}),
);
return (
{/* Changes page title visible on the header */}
Create T3 Turbo
Press on a post
item.id}
ItemSeparatorComponent={() => }
renderItem={(p) => (
deletePostMutation.mutate(p.item.id)}
/>
)}
/>
);
}