From 27ce39e6e00ae0c7ed1c2de69bba4c0a5ad49a4f Mon Sep 17 00:00:00 2001 From: Pallavi Das Date: Tue, 4 Jun 2024 13:45:31 -0700 Subject: [PATCH] added loading icons --- frontend/package.json | 2 +- .../src/components/Friends_List_Component.tsx | 148 +++++++++-------- frontend/src/components/ItemGroup.tsx | 150 ++++++++++-------- frontend/src/pages/IndividualGroupPage.tsx | 24 ++- frontend/src/pages/ItemsPage.tsx | 30 +++- package-lock.json | 8 +- 6 files changed, 216 insertions(+), 146 deletions(-) diff --git a/frontend/package.json b/frontend/package.json index cd2a631..63ec1d4 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -16,7 +16,7 @@ "@emotion/react": "^11.11.4", "@emotion/styled": "^11.11.5", "dotenv": "^16.4.5", - "framer-motion": "^11.1.9", + "framer-motion": "^11.2.10", "mongoose": "^8.4.0", "react": "^18.3.1", "react-dom": "^18.3.1", diff --git a/frontend/src/components/Friends_List_Component.tsx b/frontend/src/components/Friends_List_Component.tsx index e4068f0..2e2d088 100644 --- a/frontend/src/components/Friends_List_Component.tsx +++ b/frontend/src/components/Friends_List_Component.tsx @@ -19,6 +19,8 @@ import { MenuList, MenuItem, Text, + Spinner, + Flex, } from "@chakra-ui/react"; import { IGroup } from "../../../backend/models/groupSchema"; import { IUser } from "../../../backend/models/userSchema"; @@ -46,6 +48,7 @@ const Friends_List: React.FC = ({ const [friends, setFriends] = useState([]); const [userId, setUserId] = useState(initialUserId); const [errorMessage, setErrorMessage] = useState(""); + const [loading, setLoading] = useState(true); useEffect(() => { const fetchFriendsAndGroups = async () => { @@ -65,6 +68,8 @@ const Friends_List: React.FC = ({ } } catch (error) { console.error("Error fetching friends:", error); + } finally { + setLoading(false); } }; @@ -186,74 +191,85 @@ const Friends_List: React.FC = ({ - - - - - - - - - {friends.map((friend) => ( - - - - - - ))} - {friends.length === 0 && ( + {loading ? ( + + + + ) : ( +
Friend's UsernameActions
{friend.username} - - - } - > - Add to Group - - - {groups.length > 0 ? ( - groups.map((group) => ( - - handleGroupClick( - group._id.toString(), - friend._id, - ) - } - > - {group.groupName} - - )) - ) : ( - No groups available - )} - - - - - -
+ - + + - )} - -
- No friends currently - Friend's UsernameActions
+ + + {friends.map((friend) => ( + + {friend.username} + + + + } + > + Add to Group + + + {groups.length > 0 ? ( + groups.map((group) => ( + + handleGroupClick( + group._id.toString(), + friend._id, + ) + } + > + {group.groupName} + + )) + ) : ( + No groups available + )} + + + + + + + + + ))} + {friends.length === 0 && ( + + + No friends currently + + + )} + + + )}
); diff --git a/frontend/src/components/ItemGroup.tsx b/frontend/src/components/ItemGroup.tsx index 083d109..84b8b90 100644 --- a/frontend/src/components/ItemGroup.tsx +++ b/frontend/src/components/ItemGroup.tsx @@ -1,4 +1,4 @@ -import React from "react"; +import React, { useEffect } from "react"; import { Box, Heading, @@ -16,13 +16,15 @@ import { MenuItem, Button, TableContainer, + Spinner, + Text, + Flex, } from "@chakra-ui/react"; import { DeleteIcon } from "@chakra-ui/icons"; import { FaChevronDown } from "react-icons/fa"; import { IGroup } from "../../../backend/models/groupSchema"; import { IBasket } from "../../../backend/models/basketSchema"; import { IItem } from "../../../backend/models/itemSchema"; -import { useEffect } from "react"; import EditItem from "./EditItem"; import NewItemOptions from "./NewItemOptions"; import { @@ -131,72 +133,88 @@ const ItemGroup: React.FC = ({ - - - - - - - - - - - - - {!loading && items.length > 0 ? ( - items.map( - (item, index) => ( - console.log(item), - ( - - - - - - - - ) - ), - ) - ) : ( + {loading ? ( + + + + ) : ( + +
NameDescriptionMoreMoveDelete
{item.name}{item.notes} - - - - }> - Select Basket - - - {userBaskets.length > 0 ? ( - (console.log(userBaskets), - userBaskets.map((basket) => ( - handleMove(basket, item)} - _hover={{ textColor: "black" }} - > - {basket.basketName} - - ))) - ) : ( - No baskets available - )} - - - - } - colorScheme="red" - onClick={() => removeItem(item)} - /> -
+ - + + + + + - )} - -
No items found.NameDescriptionMoreMoveDelete
-
+ + + {items.length > 0 ? ( + items.map( + (item, index) => ( + console.log(item), + ( + + {item.name} + {item.notes} + + + + + + } + > + Select Basket + + + {userBaskets.length > 0 ? ( + (console.log(userBaskets), + userBaskets.map((basket) => ( + handleMove(basket, item)} + _hover={{ textColor: "black" }} + > + {basket.basketName} + + ))) + ) : ( + + No baskets available + + )} + + + + + } + colorScheme="red" + onClick={() => removeItem(item)} + /> + + + ) + ), + ) + ) : ( + + No items found. + + )} + + + + )} ); }; diff --git a/frontend/src/pages/IndividualGroupPage.tsx b/frontend/src/pages/IndividualGroupPage.tsx index 35e4616..81503e2 100644 --- a/frontend/src/pages/IndividualGroupPage.tsx +++ b/frontend/src/pages/IndividualGroupPage.tsx @@ -10,6 +10,7 @@ import { HStack, Divider, Avatar, + Spinner, } from "@chakra-ui/react"; import { IoArrowBack } from "react-icons/io5"; import { IGroup } from "../../../backend/models/groupSchema"; @@ -138,7 +139,7 @@ const IndividualGroupPage: React.FC = ({ }, [loading]); const dateObj = group ? new Date(group?.created) : undefined; - + return ( = ({ alignItems="center" > {loading ? ( - Loading... + + + + Loading group details, please wait... + + ) : group ? ( <> = ({ Created On - - {dateObj ? dateObj.toString() : ""} - + {dateObj ? dateObj.toString() : ""} = ({ ); }) ) : ( - - Loading... - + + + + Loading your items, please wait... + + )} diff --git a/package-lock.json b/package-lock.json index 98c561e..0fca910 100644 --- a/package-lock.json +++ b/package-lock.json @@ -60,7 +60,7 @@ "@emotion/react": "^11.11.4", "@emotion/styled": "^11.11.5", "dotenv": "^16.4.5", - "framer-motion": "^11.1.9", + "framer-motion": "^11.2.10", "mongoose": "^8.4.0", "react": "^18.3.1", "react-dom": "^18.3.1", @@ -5224,9 +5224,9 @@ } }, "node_modules/framer-motion": { - "version": "11.2.6", - "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-11.2.6.tgz", - "integrity": "sha512-XUrjjBt57e5YoHQtjwc3eNchFBuHvIgN/cS8SC4oIaAn2J/0+bLanUxXizidJKZVeHJam/JrmMnPRjYMglVn5g==", + "version": "11.2.10", + "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-11.2.10.tgz", + "integrity": "sha512-/gr3PLZUVFCc86a9MqCUboVrALscrdluzTb3yew+2/qKBU8CX6nzs918/SRBRCqaPbx0TZP10CB6yFgK2C5cYQ==", "dependencies": { "tslib": "^2.4.0" },