diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx index 76bc67ed..a77fe7fc 100644 --- a/frontend/src/App.tsx +++ b/frontend/src/App.tsx @@ -92,7 +92,7 @@ const App = (): React.ReactElement => { path={Routes.ANNOUNCEMENTS_PAGE} element={ - + } /> @@ -113,7 +113,7 @@ const App = (): React.ReactElement => { } /> diff --git a/frontend/src/components/common/SideBar.tsx b/frontend/src/components/common/SideBar.tsx index 37615f18..397f7150 100644 --- a/frontend/src/components/common/SideBar.tsx +++ b/frontend/src/components/common/SideBar.tsx @@ -76,10 +76,10 @@ const SideBar: React.FC = () => { const pages = [ { label: "Home", route: Routes.HOME_PAGE }, { label: "Tasks", route: Routes.TASKS_PAGE }, - { label: "Approvals", route: Routes.APPROVALS_PAGE }, + // { label: "Approvals", route: Routes.APPROVALS_PAGE }, { label: "Schedule", route: Routes.SCHEDULE_PAGE }, - { label: "Announcements", route: Routes.HOME_PAGE }, // NEED NEW NAME - { label: "Participants", route: Routes.RESIDENTS_PAGE }, // RESIDENTS/PARTICIPANTS + { label: "Announcements", route: Routes.ANNOUNCEMENTS_PAGE }, + { label: "Participants", route: Routes.PARTICIPANTS_PAGE }, // RESIDENTS/PARTICIPANTS { label: "Task List", route: Routes.TASKS_PAGE }, // { label: "Insights", route: Routes.INSIGHTS_PAGE }, ]; diff --git a/frontend/src/components/pages/announcements/AnnouncementsGroups.tsx b/frontend/src/components/pages/announcements/AnnouncementsGroups.tsx index 1c717d0a..d2f51d99 100644 --- a/frontend/src/components/pages/announcements/AnnouncementsGroups.tsx +++ b/frontend/src/components/pages/announcements/AnnouncementsGroups.tsx @@ -62,7 +62,10 @@ const GroupTab = ({ isDraft: boolean; selectedRooms?: number[] | null; }) => { - const rooms = (selectedRooms && selectedRooms.length > 0)? selectedRooms: roomKey.split(",").map(Number); + const rooms = + selectedRooms && selectedRooms.length > 0 + ? selectedRooms + : roomKey.split(",").map(Number); return ( - {formatRooms(rooms)} + + {formatRooms(rooms)} + - {firstAnnouncement? moment(firstAnnouncement.createdAt).fromNow(): moment(Date.now()).fromNow()} + {firstAnnouncement + ? moment(firstAnnouncement.createdAt).fromNow() + : moment(Date.now()).fromNow()} - - {truncateMessage(firstAnnouncement? firstAnnouncement.message: "", 60)} - + + + {truncateMessage( + firstAnnouncement ? firstAnnouncement.message : "", + 60, + )} + @@ -113,7 +124,15 @@ const GroupList: React.FC<{ addingNewRoom: boolean; setAddingNewRoom: React.Dispatch>; selectedRooms: number[]; -}> = ({ announcements, setSelectedGroup, addingNewRoom, setAddingNewRoom, selectedRooms}) => { +}> = ({ + announcements, + setSelectedGroup, + addingNewRoom, + setAddingNewRoom, + selectedRooms, +}) => { + const [searchRooms, setSearchRooms] = useState([]); + const [allRooms, setAllRooms] = useState([1, 2, 3, 4, 5, 6]); const [processedAnnouncements, setProcessedAnnouncements] = useState(); @@ -140,27 +159,46 @@ const GroupList: React.FC<{ processedData.groups[key] = announcementData; } }); - + setProcessedAnnouncements(processedData); }, [announcements]); const renderGroupTabs = (announcementsGroup: GroupAnnouncements) => { return ( announcementsGroup && - Object.keys(announcementsGroup).filter((roomKey) => - !searchRooms || - searchRooms.length === 0 || - searchRooms.some((room) => - roomKey.split(",").map(Number).includes(room), - ), - ).map((roomKey) => ( + [ + addingNewRoom ? ( - )) + ) : ( + <> + ), + ].concat( + Object.keys(announcementsGroup) + .filter( + (roomKey) => + !searchRooms || + searchRooms.length === 0 || + searchRooms.some((room) => + roomKey.split(",").map(Number).includes(room), + ), + ) + .map((roomKey) => ( + + )), + ) ); }; @@ -178,6 +216,10 @@ const GroupList: React.FC<{ setSearchRooms([...searchRooms, roomId]); } }; + + const addRoom = () => { + setAddingNewRoom(true); + }; return ( diff --git a/frontend/src/components/pages/announcements/AnnouncementsPage.tsx b/frontend/src/components/pages/announcements/AnnouncementsPage.tsx index 9df5f401..6e762e41 100644 --- a/frontend/src/components/pages/announcements/AnnouncementsPage.tsx +++ b/frontend/src/components/pages/announcements/AnnouncementsPage.tsx @@ -1,6 +1,5 @@ import React, { useEffect, useState } from "react"; import { Flex } from "@chakra-ui/react"; - import { GroupAnnouncements, Announcement, @@ -12,6 +11,8 @@ import { announcementsMockData } from "../../../mocks/notifications"; const AnnouncementsPage = (): React.ReactElement => { const [announcements, setAnnouncements] = useState({}); const [selectedGroup, setSelectedGroup] = useState(""); + const [addingNewRoom, setAddingNewRoom] = useState(false); + const [selectedRooms, setSelectedRooms] = useState([]); useEffect(() => { // TODO: Fetch announcements from API @@ -41,14 +42,21 @@ const AnnouncementsPage = (): React.ReactElement => { ); }; -export default AnnouncementsPage; \ No newline at end of file +export default AnnouncementsPage; diff --git a/frontend/src/components/pages/announcements/AnnouncementsView.tsx b/frontend/src/components/pages/announcements/AnnouncementsView.tsx index 748813d7..06ad2f32 100644 --- a/frontend/src/components/pages/announcements/AnnouncementsView.tsx +++ b/frontend/src/components/pages/announcements/AnnouncementsView.tsx @@ -18,7 +18,7 @@ import { TagLabel, TagCloseButton, } from "@chakra-ui/react"; -import AddCircleOutlineOutlinedIcon from '@mui/icons-material/AddCircleOutlineOutlined'; +import AddCircleOutlineOutlinedIcon from "@mui/icons-material/AddCircleOutlineOutlined"; import InfoOutlinedIcon from "@mui/icons-material/InfoOutlined"; import { GroupAnnouncements } from "../../../types/NotificationTypes"; @@ -80,7 +80,7 @@ const AnnouncementsList = ({ announcements, selectedGroup }: PropsList) => { if (selectedGroup.length === 0) { return null; } - + return ( {announcements[selectedGroup].map((announcement, index) => ( @@ -120,52 +120,68 @@ const AnnouncementsView = ({ addingNewRoom, setAddingNewRoom, selectedRooms, - setSelectedRooms + setSelectedRooms, }: Props): React.ReactElement => { const rooms = selectedGroup.split(",").map(Number); - const [allRooms, setAllRooms] = useState([1,2,3,4,5,6]); + const [allRooms, setAllRooms] = useState([1, 2, 3, 4, 5, 6]); const addRoomToNewRoom = (roomId: number) => { - if(!selectedRooms.includes(roomId)) { + if (!selectedRooms.includes(roomId)) { setSelectedRooms([...selectedRooms, roomId]); } - } + }; const deleteRoomSelected = (roomId: number) => { - if(selectedRooms.includes(roomId)) { - setSelectedRooms(selectedRooms.filter(room => room !== roomId)); + if (selectedRooms.includes(roomId)) { + setSelectedRooms(selectedRooms.filter((room) => room !== roomId)); } - } + }; const handlePost = (message: string) => { - if(addingNewRoom && selectedRooms.length > 0) { + if (addingNewRoom && selectedRooms.length > 0) { setSelectedRooms([]); setAddingNewRoom(false); } - } + }; const formatHeader = (roomIDs: number[]) => { - if(addingNewRoom && selectedGroup === "0"){ - return - - {selectedRooms.map((room) => ( - - Room {room} - deleteRoomSelected(room)} color='#57469D'/> - - ))} - - - - - - {allRooms.filter(room => !selectedRooms.includes(room)).map((room) => ( - addRoomToNewRoom(room)} key={room}>Room {room} - ))} - - - - + if (addingNewRoom && selectedGroup === "0") { + return ( + + + {selectedRooms.map((room) => ( + + Room {room} + deleteRoomSelected(room)} + color="#57469D" + /> + + ))} + + + + + + {allRooms + .filter((room) => !selectedRooms.includes(room)) + .map((room) => ( + addRoomToNewRoom(room)} key={room}> + Room {room} + + ))} + + + + + ); } return "All Rooms"; }; @@ -183,7 +199,9 @@ const AnnouncementsView = ({ h="10vh" >

- {selectedGroup === "" || selectedGroup === "0" ? formatHeader(rooms) : formatRooms(rooms)} + {selectedGroup === "" || selectedGroup === "0" + ? formatHeader(rooms) + : formatRooms(rooms)}

- {selectedGroup !== "0" && } + {selectedGroup !== "0" && ( + + )} diff --git a/frontend/src/constants/Routes.ts b/frontend/src/constants/Routes.ts index a7b3a65b..2261350f 100644 --- a/frontend/src/constants/Routes.ts +++ b/frontend/src/constants/Routes.ts @@ -12,6 +12,6 @@ export const TASKS_PAGE = "/tasks"; export const SCHEDULE_PAGE = "/schedule"; -export const RESIDENTS_PAGE = "/residents"; +export const PARTICIPANTS_PAGE = "/participants"; export const INSIGHTS_PAGE = "/insights";