Use tRPC for group create form (#250)

This commit is contained in:
Sebastien Castiel
2024-10-19 21:48:17 -04:00
committed by GitHub
parent 210c12b7ef
commit 2281316d58
6 changed files with 49 additions and 23 deletions

View File

@@ -5,16 +5,9 @@ import { trpc } from '@/trpc/client'
export const EditGroup = ({ groupId }: { groupId: string }) => { export const EditGroup = ({ groupId }: { groupId: string }) => {
const { data, isLoading } = trpc.groups.get.useQuery({ groupId }) const { data, isLoading } = trpc.groups.get.useQuery({ groupId })
const { mutateAsync, isPending } = trpc.groups.update.useMutation() const { mutateAsync } = trpc.groups.update.useMutation()
const utils = trpc.useUtils() const utils = trpc.useUtils()
// async function updateGroupAction(values: unknown, participantId?: string) {
// 'use server'
// const groupFormValues = groupFormSchema.parse(values)
// const group = await updateGroup(groupId, groupFormValues, participantId)
// redirect(`/groups/${group.id}`)
// }
if (isLoading) return <></> if (isLoading) return <></>
return ( return (

View File

@@ -40,10 +40,10 @@ export default function GroupInformation({ groupId }: { groupId: string }) {
<Skeleton className="h-3 w-3/4" /> <Skeleton className="h-3 w-3/4" />
<Skeleton className="h-3 w-1/2" /> <Skeleton className="h-3 w-1/2" />
</div> </div>
) : data.group.information ? (
<p className="text-foreground">{data.group.information}</p>
) : ( ) : (
data.group.information || ( <p className="text-muted-foreground text-sm">{t('empty')}</p>
<p className="text-muted-foreground text-sm">{t('empty')}</p>
)
)} )}
</CardContent> </CardContent>
</Card> </Card>

View File

@@ -0,0 +1,21 @@
'use client'
import { GroupForm } from '@/components/group-form'
import { trpc } from '@/trpc/client'
import { useRouter } from 'next/navigation'
export const CreateGroup = () => {
const { mutateAsync } = trpc.groups.create.useMutation()
const utils = trpc.useUtils()
const router = useRouter()
return (
<GroupForm
onSubmit={async (groupFormValues) => {
const { groupId } = await mutateAsync({ groupFormValues })
await utils.groups.invalidate()
router.push(`/groups/${groupId}`)
}}
/>
)
}

View File

@@ -1,15 +1,10 @@
import { GroupForm } from '@/components/group-form' import { CreateGroup } from '@/app/groups/create/create-group'
import { createGroup } from '@/lib/api' import { Metadata } from 'next'
import { groupFormSchema } from '@/lib/schemas'
import { redirect } from 'next/navigation' export const metadata: Metadata = {
title: 'Create Group',
}
export default function CreateGroupPage() { export default function CreateGroupPage() {
async function createGroupAction(values: unknown) { return <CreateGroup />
'use server'
const groupFormValues = groupFormSchema.parse(values)
const group = await createGroup(groupFormValues)
redirect(`/groups/${group.id}`)
}
return <GroupForm onSubmit={createGroupAction} />
} }

View File

@@ -0,0 +1,15 @@
import { createGroup } from '@/lib/api'
import { groupFormSchema } from '@/lib/schemas'
import { baseProcedure } from '@/trpc/init'
import { z } from 'zod'
export const createGroupProcedure = baseProcedure
.input(
z.object({
groupFormValues: groupFormSchema,
}),
)
.mutation(async ({ input: { groupFormValues } }) => {
const group = await createGroup(groupFormValues)
return { groupId: group.id }
})

View File

@@ -1,6 +1,7 @@
import { createTRPCRouter } from '@/trpc/init' import { createTRPCRouter } from '@/trpc/init'
import { activitiesRouter } from '@/trpc/routers/groups/activities' import { activitiesRouter } from '@/trpc/routers/groups/activities'
import { groupBalancesRouter } from '@/trpc/routers/groups/balances' import { groupBalancesRouter } from '@/trpc/routers/groups/balances'
import { createGroupProcedure } from '@/trpc/routers/groups/create.procedure'
import { groupExpensesRouter } from '@/trpc/routers/groups/expenses' import { groupExpensesRouter } from '@/trpc/routers/groups/expenses'
import { getGroupProcedure } from '@/trpc/routers/groups/get.procedure' import { getGroupProcedure } from '@/trpc/routers/groups/get.procedure'
import { groupStatsRouter } from '@/trpc/routers/groups/stats' import { groupStatsRouter } from '@/trpc/routers/groups/stats'
@@ -13,5 +14,6 @@ export const groupsRouter = createTRPCRouter({
activities: activitiesRouter, activities: activitiesRouter,
get: getGroupProcedure, get: getGroupProcedure,
create: createGroupProcedure,
update: updateGroupProcedure, update: updateGroupProcedure,
}) })