diff --git a/package-lock.json b/package-lock.json index 30af3dc..914ffa1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,7 +12,8 @@ "react": "^18.3.1", "react-dom": "^18.3.1", "react-icons": "^5.3.0", - "react-router-dom": "^6.26.0" + "react-router-dom": "^6.26.0", + "react-toastify": "^10.0.5" }, "devDependencies": { "@nabla/vite-plugin-eslint": "^2.0.4", @@ -5001,6 +5002,14 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, + "node_modules/clsx": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "engines": { + "node": ">=6" + } + }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -8980,6 +8989,18 @@ "react-dom": ">=16.8" } }, + "node_modules/react-toastify": { + "version": "10.0.5", + "resolved": "https://registry.npmjs.org/react-toastify/-/react-toastify-10.0.5.tgz", + "integrity": "sha512-mNKt2jBXJg4O7pSdbNUfDdTsK9FIdikfsIE/yUCxbAEXl4HMyJaivrVFcn3Elvt5xvCQYhUZm+hqTIu1UXM3Pw==", + "dependencies": { + "clsx": "^2.1.0" + }, + "peerDependencies": { + "react": ">=18", + "react-dom": ">=18" + } + }, "node_modules/read-cache": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", diff --git a/package.json b/package.json index 1d10348..d6316a9 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,8 @@ "react": "^18.3.1", "react-dom": "^18.3.1", "react-icons": "^5.3.0", - "react-router-dom": "^6.26.0" + "react-router-dom": "^6.26.0", + "react-toastify": "^10.0.5" }, "devDependencies": { "@nabla/vite-plugin-eslint": "^2.0.4", diff --git a/src/api/firebase.js b/src/api/firebase.js index 7fd8e7f..3644b57 100644 --- a/src/api/firebase.js +++ b/src/api/firebase.js @@ -173,7 +173,7 @@ export async function shareList(listPath, currentUserId, recipientEmail) { sharedLists: arrayUnion(listDocumentRef), }); return Promise.resolve( - `You have successfully shared your list to ${recipientEmail}`, + `You have successfully shared your list to: \n${recipientEmail}`, ); } diff --git a/src/components/ListItem.jsx b/src/components/ListItem.jsx index 8121825..468023e 100644 --- a/src/components/ListItem.jsx +++ b/src/components/ListItem.jsx @@ -1,6 +1,7 @@ import { useEffect, useState } from 'react'; import { useToggle } from '@uidotdev/usehooks'; import { Toggle } from './Toggle.jsx'; +import { notify } from '../utils/notifications'; import './ListItem.css'; import { updateItem, deleteItem } from '../api/firebase.js'; import { FaTrashAlt } from 'react-icons/fa'; @@ -15,7 +16,6 @@ export function ListItem({ purchaseInterval, dateCreated, sortCriteria, - setMessage, }) { const [purchased, setPurchased] = useToggle(false); const [isDisabled, setIsDisabled] = useState(false); @@ -55,7 +55,7 @@ export function ListItem({ dateCreated, }); console.log(`${name} updated successfully`); - alert(`${name} is purchased successfully`); + notify(`${name} has been purchased successfully!`, 'success'); setIsDisabled(true); } catch (error) { console.error('Error updating item:', error); @@ -64,7 +64,6 @@ export function ListItem({ } }; - // handleDelete Function const handleDelete = async () => { const deleteConfirm = window.confirm( `Are you sure you want to delete ${name}?`, @@ -73,7 +72,7 @@ export function ListItem({ if (deleteConfirm) { try { await deleteItem(listPath, itemId); - setMessage(`${name} has been deleted successfully!`); + notify(`${name} has been deleted successfully!`, 'success'); } catch (error) { console.log(`Error:`, error); } @@ -95,15 +94,11 @@ export function ListItem({ {name}