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)} /> )} /> ); }