diff --git a/package-lock.json b/package-lock.json index ab8d334..eb1ca4e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -19,6 +19,7 @@ "react-redux": "^8.1.3", "react-router-dom": "^6.17.0", "react-scripts": "5.0.1", + "react-toastify": "^9.1.3", "redux-persist": "^6.0.0", "styled-components": "^6.1.0", "web-vitals": "^2.1.3" @@ -4906,6 +4907,14 @@ "wrap-ansi": "^7.0.0" } }, + "node_modules/clsx": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz", + "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==", + "engines": { + "node": ">=6" + } + }, "node_modules/co": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", @@ -12038,6 +12047,18 @@ } } }, + "node_modules/react-toastify": { + "version": "9.1.3", + "resolved": "https://registry.npmjs.org/react-toastify/-/react-toastify-9.1.3.tgz", + "integrity": "sha512-fPfb8ghtn/XMxw3LkxQBk3IyagNpF/LIKjOBflbexr2AWxAH1MJgvnESwEwBn9liLFXgTKWgBSdZpw9m4OTHTg==", + "dependencies": { + "clsx": "^1.1.1" + }, + "peerDependencies": { + "react": ">=16", + "react-dom": ">=16" + } + }, "node_modules/readable-stream": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", @@ -18272,6 +18293,11 @@ "wrap-ansi": "^7.0.0" } }, + "clsx": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz", + "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==" + }, "co": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", @@ -23311,6 +23337,14 @@ "workbox-webpack-plugin": "^6.4.1" } }, + "react-toastify": { + "version": "9.1.3", + "resolved": "https://registry.npmjs.org/react-toastify/-/react-toastify-9.1.3.tgz", + "integrity": "sha512-fPfb8ghtn/XMxw3LkxQBk3IyagNpF/LIKjOBflbexr2AWxAH1MJgvnESwEwBn9liLFXgTKWgBSdZpw9m4OTHTg==", + "requires": { + "clsx": "^1.1.1" + } + }, "readable-stream": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", diff --git a/package.json b/package.json index a19ce4a..1b7110a 100644 --- a/package.json +++ b/package.json @@ -15,6 +15,7 @@ "react-redux": "^8.1.3", "react-router-dom": "^6.17.0", "react-scripts": "5.0.1", + "react-toastify": "^9.1.3", "redux-persist": "^6.0.0", "styled-components": "^6.1.0", "web-vitals": "^2.1.3" diff --git a/src/index.js b/src/index.js index 3f42b19..f4befd5 100644 --- a/src/index.js +++ b/src/index.js @@ -5,6 +5,9 @@ import { Provider } from 'react-redux'; import { App } from 'App'; +import { ToastContainer } from 'react-toastify'; +import 'react-toastify/dist/ReactToastify.css'; + import { persistor, store } from 'redux/store'; import './index.css'; @@ -15,6 +18,7 @@ ReactDOM.createRoot(document.getElementById('root')).render( + diff --git a/src/pages/PostDetailsPage.jsx b/src/pages/PostDetailsPage.jsx index d5854e5..b48be17 100644 --- a/src/pages/PostDetailsPage.jsx +++ b/src/pages/PostDetailsPage.jsx @@ -13,6 +13,7 @@ import ErrorMessage from 'components/ErrorMessage'; import { useDispatch, useSelector } from 'react-redux'; import { requestPostDetails } from 'redux/postDetailReducer'; +import { toast } from 'react-toastify'; const PostCommentsPage = lazy(() => import('pages/PostCommentsPage')); @@ -34,7 +35,20 @@ const PostDetailsPage = () => { // коли у нас не прийде id поста, ми його просто відхиляємо, виходом з функції if (!postId) return; // thunk можна діспатчити, і дані які будуть у неї передані, прийдуть першим аргументои у async - dispatch(requestPostDetails(postId)); + dispatch(requestPostDetails(postId)) + .unwrap() + .then(() => { + toast.success('Hi! Post details was success fetched', { + position: 'top-center', + autoClose: 5000, + hideProgressBar: false, + closeOnClick: true, + pauseOnHover: true, + draggable: true, + progress: undefined, + theme: 'dark', + }); + }); }, [postId, dispatch]); return (