diff --git a/app/(main)/request/CartPage.module.css b/app/(main)/request/CartPage.module.css
index ec018b2b..dfbfb4b3 100644
--- a/app/(main)/request/CartPage.module.css
+++ b/app/(main)/request/CartPage.module.css
@@ -1,9 +1,11 @@
.itemsCard {
- width: 36.0625rem;
+ width: 100%;
+ min-width: 36.0625rem;
height: auto;
background: #fff;
filter: drop-shadow(0 1px 3px rgba(0, 0, 0, 0.05));
border-radius: 0.9375rem;
+ margin-bottom: 1rem;
}
.itemsCardHeader {
diff --git a/app/(main)/request/[storeId]/cart/page.tsx b/app/(main)/request/[storeId]/cart/page.tsx
index d4076f0b..862621b4 100644
--- a/app/(main)/request/[storeId]/cart/page.tsx
+++ b/app/(main)/request/[storeId]/cart/page.tsx
@@ -6,6 +6,7 @@ import Breadcrumbs from '@/app/(main)/components/Breadcrumbs';
import Link from 'next/link';
import TicketDestStoreDropdown from '@/app/(main)/components/TicketDestStoreDropdown';
import { Store } from '@/app/types/store';
+import AddOutOfStockToCartForm from '@/app/(main)/request/components/AddOutOfStockToCartForm';
export default async function CartPage({
params,
@@ -70,6 +71,10 @@ export default async function CartPage({
0 in-stock · 0 out-of-stock
+
+
Out-of-Stock Request
+
+
);
}
@@ -115,18 +120,6 @@ export default async function CartPage({
}}
/>
Cart
- {hasItems ? (
-
-
Ticket Destination Store:
-
({
- store,
- }))}
- />
-
- ) : null}
{showSuccess && (
Ticket submitted successfully!
@@ -135,7 +128,23 @@ export default async function CartPage({
)}
- {hasItems ?
: null}
+
+
Out-of-Stock Request
+
+
+ {hasItems ? (
+
+
Ticket Destination Store:
+
({
+ store,
+ }))}
+ />
+
+
+ ) : null}
);
diff --git a/app/(main)/request/[storeId]/page.tsx b/app/(main)/request/[storeId]/page.tsx
index a759dfe9..98db603d 100644
--- a/app/(main)/request/[storeId]/page.tsx
+++ b/app/(main)/request/[storeId]/page.tsx
@@ -3,7 +3,6 @@ import ItemCard from '@/app/(main)/components/ItemCard';
import ItemSearch from '@/app/(main)/components/ItemSearch';
import Breadcrumbs from '@/app/(main)/components/Breadcrumbs';
import Link from 'next/link';
-import AddOutOfStockToCartForm from '@/app/(main)/request/components/AddOutOfStockToCartForm';
import styles from '@/app/(main)/request/Cart.module.css';
import Image from 'next/image';
import pinIcon from '@/public/pin-icon.svg';
@@ -152,8 +151,6 @@ export default async function RequestStorePage({
})) || []
}
/>
- Out-of-Stock Request
-
In-Stock Items
{items && items.length > 0 ? (
diff --git a/app/(main)/request/all/Accordion.module.css b/app/(main)/request/all/Accordion.module.css
new file mode 100644
index 00000000..8ee0159c
--- /dev/null
+++ b/app/(main)/request/all/Accordion.module.css
@@ -0,0 +1,18 @@
+.accordionSpacing {
+ margin-bottom: 1rem;
+}
+
+.accordionBody {
+ background-color: transparent;
+ border: none;
+}
+
+.accordionHeader :global(.accordion-button) {
+ box-shadow: none;
+ border: none;
+}
+
+.accordionBodySpacing {
+ padding-left: 0;
+ padding-right: 0;
+}
diff --git a/app/(main)/request/all/cart/page.tsx b/app/(main)/request/all/cart/page.tsx
index 41fb490f..ef673db3 100644
--- a/app/(main)/request/all/cart/page.tsx
+++ b/app/(main)/request/all/cart/page.tsx
@@ -1,13 +1,15 @@
import { createClient } from '@/app/lib/supabase/server-client';
import TicketItemsList from '@/app/(main)/components/TicketItemsList';
import SubmitTicketButton from '@/app/(main)/request/components/SubmitTicketButton';
-import Link from 'next/link';
import styles from '@/app/(main)/request/CartPage.module.css';
import Accordion from 'react-bootstrap/Accordion';
import AccordionBody from 'react-bootstrap/AccordionBody';
import AccordionHeader from 'react-bootstrap/AccordionHeader';
import AccordionItem from 'react-bootstrap/AccordionItem';
import Breadcrumbs from '@/app/(main)/components/Breadcrumbs';
+import TicketDestStoreDropdown from '@/app/(main)/components/TicketDestStoreDropdown';
+import accordionStyles from '@/app/(main)/request/all/Accordion.module.css';
+import AddOutOfStockToCartForm from '@/app/(main)/request/components/AddOutOfStockToCartForm';
type DraftTicket = {
ticket_id: string;
@@ -17,13 +19,7 @@ type DraftTicket = {
}[];
};
-export default async function AllCartsPage({
- searchParams,
-}: {
- searchParams: Promise<{ submitted?: string; ticketId?: string }>;
-}) {
- const { submitted, ticketId } = await searchParams;
- const showSuccess = submitted === '1' && !!ticketId;
+export default async function AllCartsPage() {
const supabase = await createClient();
// Get the current user
@@ -38,7 +34,7 @@ export default async function AllCartsPage({
// Fetch stores
const { data: stores, error: storesError } = await supabase
.from('stores')
- .select('store_id, name')
+ .select('store_id, name, street_address')
.order('name');
if (storesError || !stores) {
@@ -69,9 +65,14 @@ export default async function AllCartsPage({
{sortedStores.map((store) => {
return (
-
- {store.name}
-
+
+
+ {store.name}
+
+
ITEMS
@@ -116,29 +117,52 @@ export default async function AllCartsPage({
return (
-
- {store.name}
-
- {showSuccess && (
-
-
Ticket submitted successfully!
-
- Go to ticket
-
-
- )}
+
+
+ {store.name}
+
+
{draftTicket ? (
+
+
Out-of-Stock Request
+
+
{draftTicket.ticket_items[0].count > 0 ? (
-
+
+
Ticket Destination Store:
+
s.store_id !== store.store_id)
+ .map((s) => ({
+ store: {
+ store_id: s.store_id,
+ name: s.name,
+ street_address: s.street_address,
+ },
+ }))}
+ />
+
+
) : null}
) : (
-
-
-
ITEMS
-
0 in-stock · 0 out-of-stock
+
+
+
+
ITEMS
+ 0 in-stock · 0 out-of-stock
+
+
+
)}
diff --git a/app/(main)/request/all/page.tsx b/app/(main)/request/all/page.tsx
index 949832a4..e737d971 100644
--- a/app/(main)/request/all/page.tsx
+++ b/app/(main)/request/all/page.tsx
@@ -2,7 +2,6 @@ import { createClient } from '@/app/lib/supabase/server-client';
import ItemSearch from '@/app/(main)/components/ItemSearch';
import ItemCard from '@/app/(main)/components/ItemCard';
import Link from 'next/link';
-import AddOutOfStockToCartForm from '@/app/(main)/request/components/AddOutOfStockToCartForm';
import Accordion from 'react-bootstrap/Accordion';
import AccordionBody from 'react-bootstrap/AccordionBody';
import AccordionHeader from 'react-bootstrap/AccordionHeader';
@@ -11,6 +10,7 @@ import Breadcrumbs from '@/app/(main)/components/Breadcrumbs';
import styles from '@/app/(main)/request/Cart.module.css';
import Image from 'next/image';
import cartIcon from '@/public/cart-icon.svg';
+import accordionStyles from '@/app/(main)/request/all/Accordion.module.css';
type SearchParams = {
query?: string;
@@ -169,11 +169,14 @@ export default async function RequestAllStoresPage({
const storeItems = itemsByStore.get(store.store_id) || [];
return (
-
- {store.name}
-
- Out-of-Stock Request
-
+
+
+ {store.name}
+
+
{storeItems.length > 0 ? (
In-Stock Items
diff --git a/app/(main)/request/components/SubmitTicketButton.tsx b/app/(main)/request/components/SubmitTicketButton.tsx
index 36d6a489..2cb18570 100644
--- a/app/(main)/request/components/SubmitTicketButton.tsx
+++ b/app/(main)/request/components/SubmitTicketButton.tsx
@@ -1,27 +1,15 @@
'use client';
import { useState, useTransition } from 'react';
import { updateTicketStatus } from '@/app/actions/ticket';
-import { usePathname, useRouter, useSearchParams } from 'next/navigation';
export default function SubmitTicketButton({ ticketId }: { ticketId: string }) {
const [isPending, startTransition] = useTransition();
const [error, setError] = useState(null);
- const router = useRouter();
- const pathname = usePathname();
- const searchParams = useSearchParams();
-
const handleSubmit = async () => {
setError(null);
startTransition(async () => {
const result = await updateTicketStatus('requested', ticketId);
- if (result.success) {
- const params = new URLSearchParams(searchParams?.toString() || '');
- params.set('submitted', '1');
- params.set('ticketId', ticketId);
- router.replace(`${pathname}?${params.toString()}`);
- } else {
- setError(result.error || 'Failed to submit ticket.');
- }
+ if (!result.success) setError(result.error || 'Failed to submit ticket.');
});
};
diff --git a/app/actions/ticket.ts b/app/actions/ticket.ts
index 4c623300..4ce87b45 100644
--- a/app/actions/ticket.ts
+++ b/app/actions/ticket.ts
@@ -242,11 +242,11 @@ export async function addToCart(
return { success: false, data: null, error: itemError.message };
}
- return { success: true, data: ticketItem };
- }
+ revalidatePath(`/request/${storeId}/cart`);
+ revalidatePath(`/request/all/cart`);
- // If description is provided
- if (description) {
+ return { success: true, data: ticketItem };
+ } else if (description) {
// Create a ticket item in ticket_items
const { data: ticketItem, error: itemError } = await supabase
.from('ticket_items')
@@ -262,10 +262,13 @@ export async function addToCart(
return { success: false, data: null, error: itemError.message };
}
+ revalidatePath(`/request/${storeId}/cart`);
+ revalidatePath(`/request/all/cart`);
+
return { success: true, data: ticketItem };
}
- return { success: true, data: ticket };
+ return { success: true, data: null };
}
export async function updateTicketDestStore(