diff --git a/src/components/categoryPageClientComponents.tsx b/src/components/categoryPageClientComponents.tsx
index ac8b908..f59b3f0 100644
--- a/src/components/categoryPageClientComponents.tsx
+++ b/src/components/categoryPageClientComponents.tsx
@@ -23,6 +23,8 @@ import {
} from '@/components/ui/alert-dialog';
import { categoryFormSchema } from '@/lib/form-schemas/categoryFormSchema';
import CategoryForm from '@/components/form/categoryForm';
+import { useMediaQuery } from '@/lib/hooks/useMediaQuery';
+import { Drawer, DrawerContent, DrawerHeader, DrawerTitle, DrawerTrigger } from '@/components/ui/drawer';
export default function CategoryPageClientContent({categories, onSubmit, onDelete, className}: {
categories: Category[],
@@ -31,6 +33,7 @@ export default function CategoryPageClientContent({categories, onSubmit, onDelet
className: string,
}) {
+ const isDesktop = useMediaQuery('(min-width: 768px)');
const router = useRouter();
const [isEditDialogOpen, setIsEditDialogOpen] = useState(false);
@@ -97,26 +100,51 @@ export default function CategoryPageClientContent({categories, onSubmit, onDelet
Categories
{/* Edit dialog */}
-
+ {
+ isDesktop ? (
+
+ ) : (
+
+
+
+
+
+
+ {selectedCategory?.id ? 'Update Category' : 'Create Category'}
+
+
+
+
+ )
+ }
{/* Data Table */}
diff --git a/src/components/entityPageClientComponents.tsx b/src/components/entityPageClientComponents.tsx
index 4f4a8bd..3845ee1 100644
--- a/src/components/entityPageClientComponents.tsx
+++ b/src/components/entityPageClientComponents.tsx
@@ -24,6 +24,8 @@ import {
AlertDialogFooter,
AlertDialogHeader,
} from '@/components/ui/alert-dialog';
+import { useMediaQuery } from '@/lib/hooks/useMediaQuery';
+import { Drawer, DrawerContent, DrawerHeader, DrawerTitle, DrawerTrigger } from '@/components/ui/drawer';
export default function EntityPageClientContent({entities, onSubmit, onDelete, className}: {
entities: Entity[],
@@ -32,6 +34,7 @@ export default function EntityPageClientContent({entities, onSubmit, onDelete, c
className: string,
}) {
+ const isDesktop = useMediaQuery('(min-width: 768px)');
const router = useRouter();
const [isEditDialogOpen, setIsEditDialogOpen] = useState(false);
@@ -125,26 +128,51 @@ export default function EntityPageClientContent({entities, onSubmit, onDelete, c
Entities
{/* Edit dialog */}
-
+ {
+ isDesktop ? (
+
+ ) : (
+
+
+
+
+
+
+ {selectedEntity?.id ? 'Update Entity' : 'Create Entity'}
+
+
+
+
+ )
+ }
{/* Filter input */}
diff --git a/src/components/paymentPageClientComponents.tsx b/src/components/paymentPageClientComponents.tsx
index d25f5df..60a21fd 100644
--- a/src/components/paymentPageClientComponents.tsx
+++ b/src/components/paymentPageClientComponents.tsx
@@ -23,6 +23,8 @@ import { paymentFormSchema } from '@/lib/form-schemas/paymentFormSchema';
import { Category, Entity, Payment } from '@prisma/client';
import PaymentForm from '@/components/form/paymentForm';
import { columns } from '@/app/payments/columns';
+import { Drawer, DrawerContent, DrawerHeader, DrawerTitle, DrawerTrigger } from '@/components/ui/drawer';
+import { useMediaQuery } from '@/lib/hooks/useMediaQuery';
export default function PaymentPageClientContent({
payments,
@@ -40,6 +42,7 @@ export default function PaymentPageClientContent({
className: string,
}) {
+ const isDesktop = useMediaQuery('(min-width: 768px)');
const router = useRouter();
const [isEditDialogOpen, setIsEditDialogOpen] = useState(false);
@@ -106,28 +109,55 @@ export default function PaymentPageClientContent({
Payments
{/* Edit dialog */}
-
+ {
+ isDesktop ? (
+
+ ) : (
+
+
+
+
+
+
+ {selectedPayment?.id ? 'Update Payment' : 'Create Payment'}
+
+
+
+
+ )
+ }
{/* Data Table */}
diff --git a/src/lib/hooks/useMediaQuery.ts b/src/lib/hooks/useMediaQuery.ts
new file mode 100644
index 0000000..9b9b3dd
--- /dev/null
+++ b/src/lib/hooks/useMediaQuery.ts
@@ -0,0 +1,21 @@
+'use client';
+
+import { useEffect, useState } from 'react';
+
+export function useMediaQuery(mq: string) {
+
+ const [matches, setMatch] = useState(
+ () => typeof window !== 'undefined' ? window.matchMedia(mq).matches : false,
+ );
+
+ useEffect(() => {
+ if (typeof window !== 'undefined') {
+ const mql = window.matchMedia(mq);
+ const listener = (e: any) => setMatch(e.matches);
+ mql.addEventListener('change', listener);
+ return () => mql.removeEventListener('change', listener);
+ }
+ }, [mq]);
+
+ return matches;
+}