From 1ace690aef09f7689356d7a75280f4ca5f1da91d Mon Sep 17 00:00:00 2001 From: Monique Cheng Date: Sun, 7 Apr 2024 17:37:14 -0700 Subject: [PATCH 1/3] done --- src/app/favorites/page.tsx | 9 ++++++++- src/app/favorites/styles.ts | 16 ++++++++++++++++ src/app/profileScreen/page.tsx | 8 ++++++++ src/app/profileScreen/styles.ts | 15 +++++++++++++++ 4 files changed, 47 insertions(+), 1 deletion(-) diff --git a/src/app/favorites/page.tsx b/src/app/favorites/page.tsx index 9aad30f6..1385d91a 100644 --- a/src/app/favorites/page.tsx +++ b/src/app/favorites/page.tsx @@ -2,7 +2,7 @@ import { useState, useEffect } from 'react'; import { useRouter } from 'next/navigation'; -import { Body1Bold, Body2 } from '@/styles/fonts'; +import { Body1Bold, Body2, Body3 } from '@/styles/fonts'; import BackButton from '../../components/BackButton/BackButton'; import { @@ -21,6 +21,7 @@ import { TransparentButton, ViewItem, Fullscreen, + Hover, } from './styles'; import { Product } from '../../schema/schema'; @@ -28,6 +29,7 @@ import { Product } from '../../schema/schema'; export default function FavoritesPage() { const [Favorites, setFavorites] = useState([]); const router = useRouter(); + const [hovering, setHovering] = useState(false); async function fetchProducts() { const data = (await arrayOfFavorites()) as Product[]; @@ -68,7 +70,12 @@ export default function FavoritesPage() { clickFunctions({ fav: favorite })} + onMouseEnter={() => setHovering(true)} + onMouseLeave={() => setHovering(false)} > + + Remove from favorites + diff --git a/src/app/favorites/styles.ts b/src/app/favorites/styles.ts index 1cf4c27e..a3f63c92 100644 --- a/src/app/favorites/styles.ts +++ b/src/app/favorites/styles.ts @@ -93,3 +93,19 @@ export const Fullscreen = styled.div` flex-direction: column; align-items: center; `; + +export const Hover = styled.div<{ $ishovering?: boolean }>` + visibility: ${props => (props.$ishovering ? 'visible' : 'hidden')}; + margin-bottom: 7px; + transform: translate(-10px, 0px); + color: black; + border: none; + width: 156px; + height: 26px; + border-radius: 8px; + background: var(--Light-Periwinkle, #f4f7ff); + box-shadow: 0px 2px 7px 0px rgba(0, 0, 0, 0.2); + padding-top: 6px; + position: relative; + text-align: center; +`; diff --git a/src/app/profileScreen/page.tsx b/src/app/profileScreen/page.tsx index 48e2c696..f61beb77 100644 --- a/src/app/profileScreen/page.tsx +++ b/src/app/profileScreen/page.tsx @@ -37,6 +37,7 @@ import { BlankSpace, HeaderDiv, Fullscreen, + Hover, } from './styles'; import { signOut } from '../../api/supabase/auth/auth'; import 'react-toastify/dist/ReactToastify.css'; @@ -47,6 +48,8 @@ function FavoriteSection(props: { setFavorites: (category: Product[]) => void; }) { const { Favorites, setFavorites } = props; + const [hovering, setHovering] = useState(false); + async function clickFunctions(props2: { fav: Product }) { const { fav } = props2; addOrRemoveProductFromFavorite(fav, false); @@ -72,7 +75,12 @@ function FavoriteSection(props: { clickFunctions({ fav: favorite })} + onMouseEnter={() => setHovering(true)} + onMouseLeave={() => setHovering(false)} > + + Remove from favorites + diff --git a/src/app/profileScreen/styles.ts b/src/app/profileScreen/styles.ts index 7afc9ff6..8dc336bd 100644 --- a/src/app/profileScreen/styles.ts +++ b/src/app/profileScreen/styles.ts @@ -143,3 +143,18 @@ export const Fullscreen = styled.div` width: 100%; height: 100%; `; + +export const Hover = styled.div<{ $ishovering?: boolean }>` + visibility: ${props => (props.$ishovering ? 'visible' : 'hidden')}; + margin-bottom: 7px; + color: black; + border: none; + width: 156px; + height: 26px; + border-radius: 8px; + background: var(--Light-Periwinkle, #f4f7ff); + box-shadow: 0px 2px 7px 0px rgba(0, 0, 0, 0.2); + padding-top: 6px; + position: relative; + text-align: center; +`; From 3238c16079fb6a36621e8e8e7fafa9fd8a8a01e7 Mon Sep 17 00:00:00 2001 From: Monique Cheng Date: Mon, 8 Apr 2024 16:40:33 -0700 Subject: [PATCH 2/3] so it doesnt appear on all hearts --- src/app/favorites/individualItem.tsx | 63 ++++++++++++++++++++++++ src/app/favorites/page.tsx | 60 ++++------------------ src/app/profileScreen/individualItem.tsx | 49 ++++++++++++++++++ src/app/profileScreen/page.tsx | 40 +++------------ 4 files changed, 128 insertions(+), 84 deletions(-) create mode 100644 src/app/favorites/individualItem.tsx create mode 100644 src/app/profileScreen/individualItem.tsx diff --git a/src/app/favorites/individualItem.tsx b/src/app/favorites/individualItem.tsx new file mode 100644 index 00000000..c93d7088 --- /dev/null +++ b/src/app/favorites/individualItem.tsx @@ -0,0 +1,63 @@ +import React, { useState } from 'react'; + +import { useRouter } from 'next/navigation'; + +import { Body1Bold, Body2, Body3 } from '@/styles/fonts'; + +import { + HeartIcon, + Hover, + FavoriteDiv, + ProductNameDiv, + ViewItem, + TransparentButton, +} from './styles'; + +import { addOrRemoveProductFromFavorite } from '../../api/supabase/queries/user_queries'; + +import { Product } from '../../schema/schema'; + +export default function IndividualItem(props: { + favorite: Product; + setFavorites: (category: Product[]) => void; + Favorites: Product[]; +}) { + const { favorite, Favorites, setFavorites } = props; + const router = useRouter(); + const [hovering, setHovering] = useState(false); + + async function clickFunctions(props2: { fav: Product }) { + const { fav } = props2; + addOrRemoveProductFromFavorite(fav, false); + setFavorites(Favorites.filter(Prod => Prod.id !== fav.id)); + } + + return ( + + {favorite.name} + + + {favorite.name} + Category: {favorite.category} + router.push(`/${favorite.id}`)}> + View Item + + + + clickFunctions({ fav: favorite })} + onMouseEnter={() => setHovering(true)} + onMouseLeave={() => setHovering(false)} + > + + Remove from favorites + + + + + ); +} diff --git a/src/app/favorites/page.tsx b/src/app/favorites/page.tsx index 1385d91a..fb24ab3d 100644 --- a/src/app/favorites/page.tsx +++ b/src/app/favorites/page.tsx @@ -1,35 +1,19 @@ 'use client'; import { useState, useEffect } from 'react'; -import { useRouter } from 'next/navigation'; -import { Body1Bold, Body2, Body3 } from '@/styles/fonts'; import BackButton from '../../components/BackButton/BackButton'; +import IndividualItem from './individualItem'; -import { - arrayOfFavorites, - addOrRemoveProductFromFavorite, -} from '../../api/supabase/queries/user_queries'; +import { arrayOfFavorites } from '../../api/supabase/queries/user_queries'; import NavBar from '../../components/NavBarFolder/NavBar'; -import { - FavoriteDiv, - OutterFavoriteDiv, - OutterBox, - ProductNameDiv, - HeartIcon, - TransparentButton, - ViewItem, - Fullscreen, - Hover, -} from './styles'; +import { OutterFavoriteDiv, OutterBox, Fullscreen } from './styles'; import { Product } from '../../schema/schema'; export default function FavoritesPage() { const [Favorites, setFavorites] = useState([]); - const router = useRouter(); - const [hovering, setHovering] = useState(false); async function fetchProducts() { const data = (await arrayOfFavorites()) as Product[]; @@ -39,12 +23,6 @@ export default function FavoritesPage() { fetchProducts(); }, []); - async function clickFunctions(props: { fav: Product }) { - const { fav } = props; - addOrRemoveProductFromFavorite(fav, false); - setFavorites(Favorites.filter(Prod => Prod.id !== fav.id)); - } - return ( @@ -53,32 +31,12 @@ export default function FavoritesPage() {

Favorites

{Favorites.map(favorite => ( - - {favorite.name} - - - {favorite.name} - Category: {favorite.category} - router.push(`/${favorite.id}`)}> - View Item - - - - clickFunctions({ fav: favorite })} - onMouseEnter={() => setHovering(true)} - onMouseLeave={() => setHovering(false)} - > - - Remove from favorites - - - - + ))} diff --git a/src/app/profileScreen/individualItem.tsx b/src/app/profileScreen/individualItem.tsx new file mode 100644 index 00000000..57872f9e --- /dev/null +++ b/src/app/profileScreen/individualItem.tsx @@ -0,0 +1,49 @@ +import React, { useState } from 'react'; + +import { Body1Bold, Body2, Body3 } from '@/styles/fonts'; + +import { HeartIcon, Hover, FavoriteDiv, ProductNameDiv } from './styles'; + +import { addOrRemoveProductFromFavorite } from '../../api/supabase/queries/user_queries'; + +import { Product } from '../../schema/schema'; +import { TransparentButton } from '../favorites/styles'; + +export default function IndividualItem(props: { + favorite: Product; + setFavorites: (category: Product[]) => void; + Favorites: Product[]; +}) { + const { favorite, Favorites, setFavorites } = props; + const [hovering, setHovering] = useState(false); + + async function clickFunctions(props2: { fav: Product }) { + const { fav } = props2; + addOrRemoveProductFromFavorite(fav, false); + setFavorites(Favorites.filter(Prod => Prod.id !== fav.id)); + } + + return ( + + {favorite.name} + + {favorite.name} + Category: {favorite.category} + + clickFunctions({ fav: favorite })} + onMouseEnter={() => setHovering(true)} + onMouseLeave={() => setHovering(false)} + > + + Remove from favorites + + + + + ); +} diff --git a/src/app/profileScreen/page.tsx b/src/app/profileScreen/page.tsx index f61beb77..4783bc87 100644 --- a/src/app/profileScreen/page.tsx +++ b/src/app/profileScreen/page.tsx @@ -13,7 +13,6 @@ import { Body2, } from '@/styles/fonts'; import { - addOrRemoveProductFromFavorite, arrayOfFavorites, fetchUser, fetchUserAddress, @@ -30,31 +29,21 @@ import { TextSpacing, OrderHistory, FavoritesContainer, - ProductNameDiv, - FavoriteDiv, - HeartIcon, BackButtonDiv, BlankSpace, HeaderDiv, Fullscreen, - Hover, } from './styles'; +import IndividualItem from './individualItem'; import { signOut } from '../../api/supabase/auth/auth'; import 'react-toastify/dist/ReactToastify.css'; -import { TransparentButton } from '../favorites/styles'; function FavoriteSection(props: { Favorites: Product[]; setFavorites: (category: Product[]) => void; }) { const { Favorites, setFavorites } = props; - const [hovering, setHovering] = useState(false); - async function clickFunctions(props2: { fav: Product }) { - const { fav } = props2; - addOrRemoveProductFromFavorite(fav, false); - setFavorites(Favorites.filter(Prod => Prod.id !== fav.id)); - } return (
@@ -63,27 +52,12 @@ function FavoriteSection(props: { {Favorites.slice(0, 2).map(favorite => ( - - {favorite.name} - - {favorite.name} - Category: {favorite.category} - - clickFunctions({ fav: favorite })} - onMouseEnter={() => setHovering(true)} - onMouseLeave={() => setHovering(false)} - > - - Remove from favorites - - - - + ))}
From 818064a0dbcaeddc681e38d04c2a37cba0cd0ff8 Mon Sep 17 00:00:00 2001 From: Monique Cheng Date: Mon, 8 Apr 2024 17:17:44 -0700 Subject: [PATCH 3/3] rebase --- holder 2.zip | Bin 0 -> 48762 bytes public/check 2.svg | 4 ++ public/ready 2.svg | 11 ++++ public/right_arrow 2.svg | 4 ++ public/x 2.svg | 6 ++ src/app/orderHistory/page 2.tsx | 48 ++++++++++++++ src/app/orderHistory/styles 2.ts | 49 ++++++++++++++ .../OrderHistory/ImageCarousel 2.tsx | 21 ++++++ .../OrderHistory/OrderHistoryBox 2.tsx | 62 ++++++++++++++++++ 9 files changed, 205 insertions(+) create mode 100644 holder 2.zip create mode 100644 public/check 2.svg create mode 100644 public/ready 2.svg create mode 100644 public/right_arrow 2.svg create mode 100644 public/x 2.svg create mode 100644 src/app/orderHistory/page 2.tsx create mode 100644 src/app/orderHistory/styles 2.ts create mode 100644 src/components/OrderHistory/ImageCarousel 2.tsx create mode 100644 src/components/OrderHistory/OrderHistoryBox 2.tsx diff --git a/holder 2.zip b/holder 2.zip new file mode 100644 index 0000000000000000000000000000000000000000..f73e7a51dab44fcbcef02776374442c3af33e72d GIT binary patch literal 48762 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 + + + \ No newline at end of file diff --git a/public/ready 2.svg b/public/ready 2.svg new file mode 100644 index 00000000..3e356ae2 --- /dev/null +++ b/public/ready 2.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/public/right_arrow 2.svg b/public/right_arrow 2.svg new file mode 100644 index 00000000..36957c93 --- /dev/null +++ b/public/right_arrow 2.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/x 2.svg b/public/x 2.svg new file mode 100644 index 00000000..495c7fc5 --- /dev/null +++ b/public/x 2.svg @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/src/app/orderHistory/page 2.tsx b/src/app/orderHistory/page 2.tsx new file mode 100644 index 00000000..00c64b20 --- /dev/null +++ b/src/app/orderHistory/page 2.tsx @@ -0,0 +1,48 @@ +'use client'; + +import React, { useEffect, useState } from 'react'; +import { Heading1 } from '@/styles/fonts'; +import OrderDetailsWithProducts from '../../components/OrderHistory/OrderHistoryBox'; +import { fetchOrderIdsByUserIdSorted } from '../../api/supabase/queries/order_queries'; + +import { + OrderHistoryContainer, + OutterBox, + NavBarMovedUP, + Fullscreen, +} from './styles'; +import BackButton from '../../components/BackButton/BackButton'; + +function OrderHistory() { + const [orderIds, setOrderIds] = useState([]); + + useEffect(() => { + const fetchIds = async () => { + const ids = await fetchOrderIdsByUserIdSorted(); + setOrderIds(ids); + }; + + fetchIds(); + }, []); + + return ( + + + + + Order History + + {orderIds.length > 0 ? ( + orderIds.map((orderId: number) => ( + + )) + ) : ( +
Loading...
+ )} +
+
+
+ ); +} + +export default OrderHistory; diff --git a/src/app/orderHistory/styles 2.ts b/src/app/orderHistory/styles 2.ts new file mode 100644 index 00000000..9b2e322a --- /dev/null +++ b/src/app/orderHistory/styles 2.ts @@ -0,0 +1,49 @@ +// styles.ts (for styled-components) +import styled from 'styled-components'; +import NavBar from '../../components/NavBarFolder/NavBar'; + +import Footer from '../../components/FooterFolder/Footer'; + +export const FooterMoved = styled(Footer)` + left: 0; +`; + +export const NavBarMovedUP = styled(NavBar)` + position: relative; +`; + +export const OutterBox = styled.div` + width: 900px; + margin: 0 auto; // This will center the OutterBox +`; + +export const OrderHistoryContainer = styled.div` + display: flex; + flex-direction: column; + align-items: center; + border-radius: 10px; + background: var(--White, #fff); + box-shadow: 0px 1px 4px 1px rgba(0, 0, 0, 0.2); + width: 800px; // Width of the outer box + height: 700px; + overflow: scroll; + margin-top: 10px; + padding: 0; // Ensure there's no padding pushing the internal boxes inward +`; + +export const OrderHistoryBox = styled.div` + width: 100%; // Make internal box take full width of the container + margin: 20px 0; // Keep vertical spacing between orders + padding: 30px; // Inner spacing for content inside the box + border-radius: 8px; + background: #fff; + box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1); + display: flex; + flex-direction: column; + gap: 20px; + overflow-y: auto; +`; +export const Fullscreen = styled.div` + width: 100%; + height: 100%; +`; diff --git a/src/components/OrderHistory/ImageCarousel 2.tsx b/src/components/OrderHistory/ImageCarousel 2.tsx new file mode 100644 index 00000000..159adb28 --- /dev/null +++ b/src/components/OrderHistory/ImageCarousel 2.tsx @@ -0,0 +1,21 @@ +/* eslint-disable react/no-array-index-key */ +import React from 'react'; +import { GalleryContainer, ImageContainer, GalleryImage } from './styles'; + +interface ImageGalleryProps { + images: string[]; // Array of image URLs +} + +export default function ImageGallery(props: ImageGalleryProps) { + const { images } = props; + + return ( + + {images.map((image, index) => ( + + + + ))} + + ); +} diff --git a/src/components/OrderHistory/OrderHistoryBox 2.tsx b/src/components/OrderHistory/OrderHistoryBox 2.tsx new file mode 100644 index 00000000..329a921c --- /dev/null +++ b/src/components/OrderHistory/OrderHistoryBox 2.tsx @@ -0,0 +1,62 @@ +'use client'; + +// Importing the required components and styles +import React, { useState, useEffect } from 'react'; +import { Order, Product } from '../../schema/schema'; +import { + getOrderById, + fetchProductsFromOrder, +} from '../../api/supabase/queries/order_queries'; +import ImageCarousel from './ImageCarousel'; +import OrderHistoryText from './OrderHistoryText'; +import { RowDiv } from './styles'; + +interface OrderDetailsWithProductsProps { + orderId: number; +} + +export default function OrderDetailsWithProducts({ + orderId, +}: OrderDetailsWithProductsProps) { + const [order, setOrder] = useState(null); + const [products, setProducts] = useState([]); + const [loading, setLoading] = useState(true); + + useEffect(() => { + const fetchData = async () => { + setLoading(true); + try { + const fetchedOrder = await getOrderById(orderId); + const fetchedProducts = await fetchProductsFromOrder(orderId); + setOrder(fetchedOrder); + setProducts(fetchedProducts); + } finally { + setLoading(false); + } + }; + + fetchData(); + }, [orderId]); + + if (loading) { + return
Loading...
; + } + + if (!order) { + return
; + } + + const imageUrls = products.map(product => product.photo).slice(0, 3); + + return ( + + + + + ); +}