From f881aff5f9993c3a6b4b0d8ed7e67d2f812f39d6 Mon Sep 17 00:00:00 2001 From: Sebastien Castiel Date: Tue, 19 Dec 2023 09:44:09 -0500 Subject: Revert "Use modal dialogs for expense creation & edition (#10)" This reverts commit 1e66efe5169dfad9a0c62ba42fbf31ce977bf49e. --- src/app/groups/[groupId]/@modal/default.tsx | 3 - src/app/groups/[groupId]/@modal/expense-modal.tsx | 83 ---------------------- .../@modal/expenses/[expenseId]/edit/page.tsx | 26 ------- .../[groupId]/@modal/expenses/create/page.tsx | 24 ------- .../[groupId]/expenses/[expenseId]/edit/page.tsx | 42 +++++++++++ src/app/groups/[groupId]/expenses/actions.ts | 28 -------- src/app/groups/[groupId]/expenses/create/page.tsx | 27 +++++++ src/app/groups/[groupId]/expenses/expense-list.tsx | 9 +-- src/app/groups/[groupId]/expenses/expense-page.tsx | 19 ----- src/app/groups/[groupId]/expenses/layout.tsx | 9 --- src/app/groups/[groupId]/expenses/page.tsx | 2 +- src/app/groups/[groupId]/layout.tsx | 5 +- src/app/groups/[groupId]/not-found.tsx | 5 -- src/app/groups/[groupId]/reimbursement-list.tsx | 1 - 14 files changed, 73 insertions(+), 210 deletions(-) delete mode 100644 src/app/groups/[groupId]/@modal/default.tsx delete mode 100644 src/app/groups/[groupId]/@modal/expense-modal.tsx delete mode 100644 src/app/groups/[groupId]/@modal/expenses/[expenseId]/edit/page.tsx delete mode 100644 src/app/groups/[groupId]/@modal/expenses/create/page.tsx create mode 100644 src/app/groups/[groupId]/expenses/[expenseId]/edit/page.tsx delete mode 100644 src/app/groups/[groupId]/expenses/actions.ts create mode 100644 src/app/groups/[groupId]/expenses/create/page.tsx delete mode 100644 src/app/groups/[groupId]/expenses/expense-page.tsx delete mode 100644 src/app/groups/[groupId]/expenses/layout.tsx delete mode 100644 src/app/groups/[groupId]/not-found.tsx (limited to 'src/app') diff --git a/src/app/groups/[groupId]/@modal/default.tsx b/src/app/groups/[groupId]/@modal/default.tsx deleted file mode 100644 index 86b9e9a..0000000 --- a/src/app/groups/[groupId]/@modal/default.tsx +++ /dev/null @@ -1,3 +0,0 @@ -export default function Default() { - return null -} diff --git a/src/app/groups/[groupId]/@modal/expense-modal.tsx b/src/app/groups/[groupId]/@modal/expense-modal.tsx deleted file mode 100644 index 17bb302..0000000 --- a/src/app/groups/[groupId]/@modal/expense-modal.tsx +++ /dev/null @@ -1,83 +0,0 @@ -'use client' -import { - Dialog, - DialogContent, - DialogHeader, - DialogTitle, -} from '@/components/ui/dialog' -import { useRouter } from 'next/navigation' -import { ReactNode, useEffect, useState } from 'react' -import { Drawer } from 'vaul' - -type Props = { - children: ReactNode - title: ReactNode -} - -export function ExpenseModal(props: Props) { - const size = useTailwindBreakpoint() - if (size === 'xs') { - return - } else { - return - } -} - -export function ExpenseDialog({ children, title }: Props) { - const router = useRouter() - - return ( - router.back()}> - - - {title} - - {children} - - - ) -} - -export function ExpenseVaul({ children, title }: Props) { - const router = useRouter() - return ( - router.back()}> - - {title} - - -
-
{title}
-
{children}
-
-
-
- ) -} - -export function useTailwindBreakpoint() { - const [size, setSize] = useState<'xs' | 'sm' | 'md' | 'lg'>('xs') - - useEffect(() => { - const handleBreakpointChange = () => { - if (window.innerWidth >= 1200) { - setSize('lg') - } else if (window.innerWidth >= 768) { - setSize('md') - } else if (window.innerWidth >= 640) { - setSize('sm') - } else { - setSize('xs') - } - } - - window.addEventListener('resize', handleBreakpointChange) - handleBreakpointChange() - - return () => { - window.removeEventListener('resize', handleBreakpointChange) - } - }, []) - - return size -} diff --git a/src/app/groups/[groupId]/@modal/expenses/[expenseId]/edit/page.tsx b/src/app/groups/[groupId]/@modal/expenses/[expenseId]/edit/page.tsx deleted file mode 100644 index fb70f45..0000000 --- a/src/app/groups/[groupId]/@modal/expenses/[expenseId]/edit/page.tsx +++ /dev/null @@ -1,26 +0,0 @@ -import { ExpenseModal } from '@/app/groups/[groupId]/@modal/expense-modal' -import { ExpenseForm } from '@/components/expense-form' -import { getExpense, getGroup } from '@/lib/api' -import { Metadata } from 'next' -import { notFound } from 'next/navigation' - -export const metadata: Metadata = { - title: 'Edit expense', -} - -export default async function EditExpensePage({ - params: { groupId, expenseId }, -}: { - params: { groupId: string; expenseId: string } -}) { - const group = await getGroup(groupId) - if (!group) notFound() - const expense = await getExpense(groupId, expenseId) - if (!expense) notFound() - - return ( - - - - ) -} diff --git a/src/app/groups/[groupId]/@modal/expenses/create/page.tsx b/src/app/groups/[groupId]/@modal/expenses/create/page.tsx deleted file mode 100644 index 93cc413..0000000 --- a/src/app/groups/[groupId]/@modal/expenses/create/page.tsx +++ /dev/null @@ -1,24 +0,0 @@ -import { ExpenseModal } from '@/app/groups/[groupId]/@modal/expense-modal' -import { ExpenseForm } from '@/components/expense-form' -import { getGroup } from '@/lib/api' -import { Metadata } from 'next' -import { notFound } from 'next/navigation' - -export const metadata: Metadata = { - title: 'Create expense', -} - -export default async function ExpensePage({ - params: { groupId }, -}: { - params: { groupId: string } -}) { - const group = await getGroup(groupId) - if (!group) notFound() - - return ( - - - - ) -} diff --git a/src/app/groups/[groupId]/expenses/[expenseId]/edit/page.tsx b/src/app/groups/[groupId]/expenses/[expenseId]/edit/page.tsx new file mode 100644 index 0000000..188d08f --- /dev/null +++ b/src/app/groups/[groupId]/expenses/[expenseId]/edit/page.tsx @@ -0,0 +1,42 @@ +import { ExpenseForm } from '@/components/expense-form' +import { deleteExpense, getExpense, getGroup, updateExpense } from '@/lib/api' +import { expenseFormSchema } from '@/lib/schemas' +import { Metadata } from 'next' +import { notFound, redirect } from 'next/navigation' + +export const metadata: Metadata = { + title: 'Edit expense', +} + +export default async function EditExpensePage({ + params: { groupId, expenseId }, +}: { + params: { groupId: string; expenseId: string } +}) { + const group = await getGroup(groupId) + if (!group) notFound() + const expense = await getExpense(groupId, expenseId) + if (!expense) notFound() + + async function updateExpenseAction(values: unknown) { + 'use server' + const expenseFormValues = expenseFormSchema.parse(values) + await updateExpense(groupId, expenseId, expenseFormValues) + redirect(`/groups/${groupId}`) + } + + async function deleteExpenseAction() { + 'use server' + await deleteExpense(expenseId) + redirect(`/groups/${groupId}`) + } + + return ( + + ) +} diff --git a/src/app/groups/[groupId]/expenses/actions.ts b/src/app/groups/[groupId]/expenses/actions.ts deleted file mode 100644 index 31bb2e7..0000000 --- a/src/app/groups/[groupId]/expenses/actions.ts +++ /dev/null @@ -1,28 +0,0 @@ -'use server' -import { createExpense, deleteExpense, updateExpense } from '@/lib/api' -import { expenseFormSchema } from '@/lib/schemas' -import { revalidatePath } from 'next/cache' - -export async function createExpenseAction(groupId: string, values: unknown) { - 'use server' - const expenseFormValues = expenseFormSchema.parse(values) - await createExpense(expenseFormValues, groupId) - revalidatePath(`/groups/${groupId}`, 'layout') -} - -export async function updateExpenseAction( - groupId: string, - expenseId: string, - values: unknown, -) { - 'use server' - const expenseFormValues = expenseFormSchema.parse(values) - await updateExpense(groupId, expenseId, expenseFormValues) - revalidatePath(`/groups/${groupId}`, 'layout') -} - -export async function deleteExpenseAction(groupId: string, expenseId: string) { - 'use server' - await deleteExpense(expenseId) - revalidatePath(`/groups/${groupId}`, 'layout') -} diff --git a/src/app/groups/[groupId]/expenses/create/page.tsx b/src/app/groups/[groupId]/expenses/create/page.tsx new file mode 100644 index 0000000..e603e59 --- /dev/null +++ b/src/app/groups/[groupId]/expenses/create/page.tsx @@ -0,0 +1,27 @@ +import { ExpenseForm } from '@/components/expense-form' +import { createExpense, getGroup } from '@/lib/api' +import { expenseFormSchema } from '@/lib/schemas' +import { Metadata } from 'next' +import { notFound, redirect } from 'next/navigation' + +export const metadata: Metadata = { + title: 'Create expense', +} + +export default async function ExpensePage({ + params: { groupId }, +}: { + params: { groupId: string } +}) { + const group = await getGroup(groupId) + if (!group) notFound() + + async function createExpenseAction(values: unknown) { + 'use server' + const expenseFormValues = expenseFormSchema.parse(values) + await createExpense(expenseFormValues, groupId) + redirect(`/groups/${groupId}`) + } + + return +} diff --git a/src/app/groups/[groupId]/expenses/expense-list.tsx b/src/app/groups/[groupId]/expenses/expense-list.tsx index adc6e7a..798a5f8 100644 --- a/src/app/groups/[groupId]/expenses/expense-list.tsx +++ b/src/app/groups/[groupId]/expenses/expense-list.tsx @@ -33,9 +33,7 @@ export function ExpenseList({ expense.isReimbursement && 'italic', )} onClick={() => { - router.push(`/groups/${groupId}/expenses/${expense.id}/edit`, { - scroll: false, - }) + router.push(`/groups/${groupId}/expenses/${expense.id}/edit`) }} >
@@ -68,10 +66,7 @@ export function ExpenseList({ {currency} {(expense.amount / 100).toFixed(2)}
diff --git a/src/app/groups/[groupId]/expenses/expense-page.tsx b/src/app/groups/[groupId]/expenses/expense-page.tsx deleted file mode 100644 index 281c38b..0000000 --- a/src/app/groups/[groupId]/expenses/expense-page.tsx +++ /dev/null @@ -1,19 +0,0 @@ -import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card' -import { ReactNode } from 'react' - -export function ExpensePage({ - children, - title, -}: { - children: ReactNode - title: ReactNode -}) { - return ( - - - {title} - - {children} - - ) -} diff --git a/src/app/groups/[groupId]/expenses/layout.tsx b/src/app/groups/[groupId]/expenses/layout.tsx deleted file mode 100644 index cd65df9..0000000 --- a/src/app/groups/[groupId]/expenses/layout.tsx +++ /dev/null @@ -1,9 +0,0 @@ -import { ReactNode } from 'react' - -export default function GroupExpensesLayout({ - children, -}: { - children: ReactNode -}) { - return <>{children} -} diff --git a/src/app/groups/[groupId]/expenses/page.tsx b/src/app/groups/[groupId]/expenses/page.tsx index 64987a3..5285cb8 100644 --- a/src/app/groups/[groupId]/expenses/page.tsx +++ b/src/app/groups/[groupId]/expenses/page.tsx @@ -35,7 +35,7 @@ export default async function GroupExpensesPage({ diff --git a/src/app/groups/[groupId]/layout.tsx b/src/app/groups/[groupId]/layout.tsx index 40f6155..3e649e7 100644 --- a/src/app/groups/[groupId]/layout.tsx +++ b/src/app/groups/[groupId]/layout.tsx @@ -5,13 +5,12 @@ import { getGroup } from '@/lib/api' import { Metadata } from 'next' import Link from 'next/link' import { notFound } from 'next/navigation' -import { PropsWithChildren, ReactNode } from 'react' +import { PropsWithChildren } from 'react' type Props = { params: { groupId: string } - modal: ReactNode } export async function generateMetadata({ @@ -29,7 +28,6 @@ export async function generateMetadata({ export default async function GroupLayout({ children, - modal, params: { groupId }, }: PropsWithChildren) { const group = await getGroup(groupId) @@ -49,7 +47,6 @@ export default async function GroupLayout({ {children} - {modal} diff --git a/src/app/groups/[groupId]/not-found.tsx b/src/app/groups/[groupId]/not-found.tsx deleted file mode 100644 index af3788b..0000000 --- a/src/app/groups/[groupId]/not-found.tsx +++ /dev/null @@ -1,5 +0,0 @@ -'use client' - -export default function NotFound() { - return null -} diff --git a/src/app/groups/[groupId]/reimbursement-list.tsx b/src/app/groups/[groupId]/reimbursement-list.tsx index 1153b59..54ee9d7 100644 --- a/src/app/groups/[groupId]/reimbursement-list.tsx +++ b/src/app/groups/[groupId]/reimbursement-list.tsx @@ -37,7 +37,6 @@ export function ReimbursementList({