diff --git a/BeerApp - Senior/.gitattributes b/BeerApp - Senior/.gitattributes
new file mode 100644
index 0000000..dfe0770
--- /dev/null
+++ b/BeerApp - Senior/.gitattributes
@@ -0,0 +1,2 @@
+# Auto detect text files and perform LF normalization
+* text=auto
diff --git a/BeerApp - Senior/src/views/BeerList/index.tsx b/BeerApp - Senior/src/views/BeerList/index.tsx
index 07dfd6f..c62b552 100644
--- a/BeerApp - Senior/src/views/BeerList/index.tsx
+++ b/BeerApp - Senior/src/views/BeerList/index.tsx
@@ -1,9 +1,11 @@
import { useEffect, useState } from 'react';
import { Beer } from '../../types';
import { fetchData } from './utils';
-import { Avatar, List, ListItemAvatar, ListItemButton, ListItemText } from '@mui/material';
+import { Avatar, BadgeRoot, List, ListItemAvatar, ListItemButton, ListItemText } from '@mui/material';
import SportsBar from '@mui/icons-material/SportsBar';
import { useNavigate } from 'react-router-dom';
+import { Button } from "@mui/material";
+import styles from "../Home/Home.module.css";
const BeerList = () => {
const navigate = useNavigate();
@@ -14,6 +16,52 @@ const BeerList = () => {
const onBeerClick = (id: string) => navigate(`/beer/${id}`);
+ const [currentPage, setCurrentPage] = useState(1);
+ const totalPages = Math.ceil(beerList.length / 5);
+
+ const itemsPerPage = 5; // Number of items to display per page
+
+ // Calculate the index range for the current page
+ const startIndex = (currentPage - 1) * itemsPerPage;
+ const endIndex = startIndex + itemsPerPage;
+ const displayedItems = beerList.slice(startIndex, endIndex);
+
+ const changePage = (pageNumber: number) => {
+ if (pageNumber >= 1 && pageNumber <= totalPages) {
+ setCurrentPage(pageNumber);
+ }
+ };
+
+ // Handle page navigation
+ const prevPage = () => {
+ if (currentPage > 1) {
+ setCurrentPage(currentPage - 1);
+ }
+ };
+
+ const nextPage = () => {
+ if (currentPage < Math.ceil(beerList.length / itemsPerPage)) {
+ setCurrentPage(currentPage + 1);
+ }
+ };
+
+// // Render the paginated list
+// return (
+//
+//
+// {displayedItems.map((item, index) => (
+// - {item}
+// ))}
+//
+//
+//
+//
+//
+//
+// );
+// };
+
+
return (
@@ -22,17 +70,40 @@ const BeerList = () => {
- {beerList.map((beer) => (
+ {displayedItems.map((beer) => (
-
+
-
+
-
+
))}
+
+ {/*
+ {displayedItems.map((bear) => (
+ - {bear.name}
+ ))}
+
*/}
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/BeerApp - Senior/src/views/Home/Home.module.css b/BeerApp - Senior/src/views/Home/Home.module.css
index 5ce0380..b83659b 100644
--- a/BeerApp - Senior/src/views/Home/Home.module.css
+++ b/BeerApp - Senior/src/views/Home/Home.module.css
@@ -12,4 +12,16 @@
display: flex;
align-items: center;
justify-content: space-between;
+}
+.pagination {
+ display: flex;
+}
+.button {
+ margin-right: 20px;
+}
+.listitem {
+ background-color: blue;
+}
+.listitembeer {
+ color:blue;
}
\ No newline at end of file
diff --git a/BeerApp - Senior/src/views/Home/index.tsx b/BeerApp - Senior/src/views/Home/index.tsx
index 2adc6df..83c53cc 100644
--- a/BeerApp - Senior/src/views/Home/index.tsx
+++ b/BeerApp - Senior/src/views/Home/index.tsx
@@ -1,17 +1,90 @@
-import { useEffect, useState } from 'react';
-import { fetchData } from './utils';
-import { Beer } from '../../types';
-import { Link as RouterLink } from 'react-router-dom';
-import { Button, Checkbox, Paper, TextField, Link } from '@mui/material';
-import styles from './Home.module.css';
+import { useEffect, useState } from "react";
+import { fetchData } from "./utils";
+import { Beer } from "../../types";
+import { Link as RouterLink } from "react-router-dom";
+import { Button, Checkbox, Paper, TextField, Link } from "@mui/material";
+import styles from "./Home.module.css";
const Home = () => {
const [beerList, setBeerList] = useState>([]);
- const [savedList, setSavedList] = useState>([]);
+ const [filterText, setFilterText] = useState("");
+ const localStorageKey = "savedItems";
+
+ const initialSavedList = JSON.parse(
+ localStorage.getItem(localStorageKey) || "[]"
+ );
+
+ const [savedList, setSavedList] = useState>(initialSavedList);
+
+ const [savedBufferList, setSavedBufferList] =
+ useState>(savedList);
+
+ const [sortByName, setSortByName] = useState(false); // State for sorting
// eslint-disable-next-line
useEffect(fetchData.bind(this, setBeerList), []);
+ const filteredBeerList = beerList.filter((beer) =>
+ beer.name.toLowerCase().includes(filterText.toLowerCase())
+ );
+
+ const handleReload: React.MouseEventHandler = (event) => {
+ fetchData(setBeerList);
+ };
+
+ const handleSaveItems = (beer: Beer) => {
+ if (!savedBufferList.some((item) => item.id === beer.id)) {
+ // If the item is not in the saved list, add it
+ const updatedSavedBufferList = [...savedBufferList, beer];
+ setSavedBufferList(updatedSavedBufferList);
+ } else {
+ // If the item is already in the saved list, remove it
+ const updatedSavedList = savedBufferList.filter(
+ (item) => item.id !== beer.id
+ );
+ setSavedBufferList(updatedSavedList);
+ }
+ };
+
+ console.log({ savedBufferList });
+
+ const handleSave = () => {
+ const existingData = JSON.parse(
+ localStorage.getItem(localStorageKey) || "[]"
+ );
+
+ // Combine existing data with savedBufferList
+ const updatedData = [...existingData, ...savedBufferList];
+
+ const uniqueData = updatedData.reduce((acc, obj) => {
+ if (!acc.find((item: any) => item.id === obj.id)) {
+ acc.push(obj);
+ }
+ return acc;
+ }, []);
+
+ // Save the unique data to local storage
+ localStorage.setItem(localStorageKey, JSON.stringify(uniqueData));
+
+ // Update the state and clear the buffer
+ setSavedList(uniqueData);
+ setSavedBufferList([]);
+ };
+
+ const handleRemove = () => {
+ localStorage.removeItem(localStorageKey);
+ setSavedList([]);
+ setSavedBufferList([]);
+ };
+
+ const sortItemsByName = () => {
+ const sortedList = [...filteredBeerList];
+ sortedList.sort((a, b) => a.name.localeCompare(b.name));
+ return sortedList;
+ };
+
+ const sortedList = sortByName ? sortItemsByName() : filteredBeerList;
+
return (
@@ -19,13 +92,48 @@ const Home = () => {
-
-
+
setFilterText(event?.target.value)}
+ value={filterText}
+ />
+
+ {savedBufferList.length > 0 && (
+
+ )}
+
+
+
+
- {beerList.map((beer, index) => (
+ {sortedList.map((beer, index) => (
-
-
+ handleSaveItems(beer)}
+ checked={savedBufferList.some(
+ (item) => item.id === beer.id
+ )}
+ />
{beer.name}
@@ -39,7 +147,7 @@ const Home = () => {
Saved items
-