From 897eaf567fd2ed4e627485241753b5298ecd75c9 Mon Sep 17 00:00:00 2001
From: Samuel Couillard <43917914+scouillard@users.noreply.github.com>
Date: Fri, 3 Feb 2023 14:05:26 -0500
Subject: [PATCH] Add New Toast Library (#4751)

* Change Toast Library

* Fix Locales strings

* Fix typos

* esf
---
 app/assets/locales/en.json                    | 95 +++++++++----------
 .../stylesheets/application.bootstrap.scss    |  4 +
 app/javascript/App.jsx                        |  8 +-
 app/javascript/components/home/HomePage.jsx   |  2 +-
 .../components/recordings/RecordingRow.jsx    |  2 +-
 app/javascript/components/rooms/RoomCard.jsx  |  2 +-
 app/javascript/components/rooms/room/Room.jsx |  2 +-
 .../components/rooms/room/join/RoomJoin.jsx   |  2 +-
 .../room/room_settings/AccessCodeRow.jsx      |  2 +-
 .../utilities/FilesDragAndDrop.jsx            |  2 +-
 .../shared_components/utilities/HCaptcha.jsx  |  4 +-
 .../users/authentication/Signup.jsx           |  2 +-
 .../useCreateActivationLink.jsx               |  2 +-
 .../admin/manage_users/useAdminCreateUser.jsx |  2 +-
 .../manage_users/useCreateInvitation.jsx      |  2 +-
 .../manage_users/useCreateServerRoom.jsx      |  2 +-
 .../admin/manage_users/useDeleteUser.jsx      |  2 +-
 .../manage_users/useUpdateUserStatus.jsx      |  2 +-
 .../useUpdateRolePermissions.jsx              |  2 +-
 .../mutations/admin/roles/useCreateRole.jsx   |  2 +-
 .../mutations/admin/roles/useDeleteRole.jsx   |  2 +-
 .../mutations/admin/roles/useUpdateRole.jsx   |  2 +-
 .../useUpdateRoomConfig.jsx                   |  2 +-
 .../server_recordings/useRecordingsReSync.jsx |  2 +-
 .../server_rooms/useDeleteServerRoom.jsx      |  4 +-
 .../site_settings/useDeleteBrandingImage.jsx  |  2 +-
 .../site_settings/useUpdateSiteSetting.jsx    |  2 +-
 .../recordings/useDeleteRecording.jsx         |  2 +-
 .../recordings/useUpdateRecording.jsx         |  2 +-
 .../useUpdateRecordingVisibility.jsx          |  2 +-
 .../room_settings/useUpdateRoomSetting.jsx    |  2 +-
 .../hooks/mutations/rooms/useCreateRoom.jsx   |  2 +-
 .../mutations/rooms/useDeleteAccessCode.jsx   |  2 +-
 .../mutations/rooms/useDeletePresentation.jsx |  2 +-
 .../hooks/mutations/rooms/useDeleteRoom.jsx   |  2 +-
 .../mutations/rooms/useGenerateAccessCode.jsx |  2 +-
 .../hooks/mutations/rooms/useRoomStatus.jsx   |  2 +-
 .../hooks/mutations/rooms/useStartMeeting.jsx |  2 +-
 .../hooks/mutations/rooms/useUpdateRoom.jsx   |  2 +-
 .../mutations/rooms/useUploadPresentation.jsx |  2 +-
 .../mutations/sessions/useCreateSession.jsx   |  2 +-
 .../mutations/sessions/useDeleteSession.jsx   |  2 +-
 .../shared_accesses/useDeleteSharedAccess.jsx |  2 +-
 .../shared_accesses/useShareAccess.jsx        |  2 +-
 .../mutations/users/useActivateAccount.jsx    |  2 +-
 .../hooks/mutations/users/useChangePwd.jsx    |  2 +-
 .../hooks/mutations/users/useCreateAvatar.jsx |  2 +-
 .../mutations/users/useCreateResetPwd.jsx     |  2 +-
 .../hooks/mutations/users/useCreateUser.jsx   |  2 +-
 .../hooks/mutations/users/useDeleteAvatar.jsx |  2 +-
 .../hooks/mutations/users/useDeleteUser.jsx   |  2 +-
 .../hooks/mutations/users/useResetPwd.jsx     |  2 +-
 .../hooks/mutations/users/useUpdateUser.jsx   |  2 +-
 app/javascript/routes/AuthenticatedOnly.jsx   |  2 +-
 package.json                                  |  2 +-
 yarn.lock                                     | 55 +++++------
 56 files changed, 132 insertions(+), 138 deletions(-)

diff --git a/app/assets/locales/en.json b/app/assets/locales/en.json
index 9de95263..1faa05cb 100644
--- a/app/assets/locales/en.json
+++ b/app/assets/locales/en.json
@@ -344,78 +344,77 @@
     }
   },
   "toast": {
+    "success": "Success",
     "success": {
       "user": {
-        "user_created": "User created.",
-        "user_updated": "User updated.",
-        "user_deleted": "User deleted.",
-        "avatar_updated": "Avatar updated.",
-        "password_updated": "Password updated.",
-        "account_activated": "Account successfully activated. Please sign in to your account.",
-        "activation_email_sent": "Activation email has been sent",
-        "reset_pwd_email_sent": "Reset password email should be sent, kindly check your inbox",
-        "challenge_passed": "Challenge Passed"
+        "user_created": "A new user has been created.",
+        "user_updated": "The user has been updated.",
+        "user_deleted": "The user has been deleted.",
+        "avatar_updated": "The avatar has been updated.",
+        "password_updated": "The password has been updated.",
+        "account_activated": "Your account has been activated.",
+        "activation_email_sent": "An email that contains the instructions to activate your account has been sent.",
+        "reset_pwd_email_sent": "An email that contains the instructions to reset your password has been sent."
       },
       "session": {
-        "signed_out": "You have successfully signed out."
+        "signed_out": "You have been signed out."
       },
       "room": {
-        "room_created": "Room created.",
-        "room_updated": "Room updated.",
-        "room_deleted": "Room deleted.",
-        "room_shared": "Room shared",
-        "room_unshared": "Room unshared",
-        "recordings_synced": "Room recordings are now synchronized",
-        "server_room_deleted": "Server room deleted.",
-        "room_configuration_updated": "Room configuration updated.",
-        "room_setting_updated": "Room setting updated.",
-        "presentation_updated": "Presentation updated.",
-        "presentation_deleted": "Presentation deleted.",
+        "room_created": "A new room has been created.",
+        "room_updated": "The room has been updated.",
+        "room_deleted": "The room has been deleted.",
+        "room_shared": "The room has been shared.",
+        "room_unshared": "The room has been unshare.d",
+        "recordings_synced": "The room recordings have been synchronized.",
+        "room_configuration_updated": "The room configuration have been updated.",
+        "room_setting_updated": "The room setting has been updated.",
+        "presentation_updated": "The presentation has been updated.",
+        "presentation_deleted": "The presentation has been deleted.",
         "joining_meeting": "Joining the meeting...",
         "meeting_started": "Meeting started.",
-        "access_code_copied": "Access code copied.",
-        "access_code_generated": "Access code generated.",
-        "access_code_removed": "Access code removed."
+        "access_code_copied": "The access code has been copied.",
+        "access_code_generated": "A new access code has been generated.",
+        "access_code_removed": "The access code has been removed."
       },
       "site_settings": {
-        "site_setting_updated": "Site setting updated."
+        "site_setting_updated": "The site setting has been updated."
       },
       "recording": {
-        "recording_visibility_updated": "Recording visibility updated.",
-        "recording_name_updated": "Recording name updated.",
-        "recording_deleted": "Recording deleted."
+        "recording_visibility_updated": "The recording visibility has been updated.",
+        "recording_name_updated": "The recording name has been updated.",
+        "recording_deleted": "The recording has been deleted."
       },
       "role": {
-        "role_created": "Role created.",
-        "role_updated": "Role updated.",
-        "role_deleted": "Role deleted.",
-        "role_permission_updated": "Role permission updated."
+        "role_created": "A new role has been created.",
+        "role_updated": "The role has been updated.",
+        "role_deleted": "The role has been deleted.",
+        "role_permission_updated": "The role permission has been updated."
       },
       "invitations": {
-        "invitation_sent": "Invitation sent"
+        "invitation_sent": "An invitation has been sent."
       }
     },
     "error": {
-      "problem_completing_action": "There was a problem completing that action. \n Please try again.",
-      "file_type_not_supported": "File type is not supported.",
-      "file_size_too_large": "File size is too large.",
-      "signin_required": "You must be signed in to access this page",
+      "problem_completing_action": "The action can't be completed. \n Please try again.",
+      "file_type_not_supported": "The file type is not supported.",
+      "file_size_too_large": "The file size is too large.",
+      "signin_required": "You must be signed in to access this page.",
       "roles": {
-        "role_assigned": "This role can't be deleted as it is assigned to at least one user."
+        "role_assigned": "This role can't be deleted because it is assigned to at least one user."
       },
       "users": {
-        "signup_error": "There was an error signing you in. Please contact your administrator.",
-        "invalid_invite": "Your invitation token is either invalid or incorrect. Please contact your administrator to receive a new one",
-        "email_exists": "An account under this email already exists. Please try again with another email",
-        "old_password": "The current password you have entered is incorrect",
-        "pending": "Your registration is pending approval from your administrator",
-        "banned": "You do not have access to this application. Please contact your administrator if you believe this is a mistake"
+        "signup_error": "You can't be authenticated. Please contact your administrator.",
+        "invalid_invite": "Your invitation token is either invalid or incorrect. Please contact your administrator to receive a new token.",
+        "email_exists": "An account under this email already exists. Please try again with another email.",
+        "old_password": "The password you have entered is incorrect.",
+        "pending": "Your registration is pending approval from the administrator. Please try again later.",
+        "banned": "You do not have access to this application. Please contact your administrator if you believe this is a mistake."
       },
       "rooms": {
-        "room_limit": "Room can not be created due to room limit being reached"
+        "room_limit": "The room can't be created due to reaching the room limit."
       },
       "session": {
-        "invalid_credentials": "Invalid username or password. Please check your credentials and try again."
+        "invalid_credentials": "The username or password is invalid. Please verify your credentials and try again."
       }
     }
   },
@@ -430,8 +429,8 @@
   "account_activation_page": {
     "title": "Account Activation",
     "account_unverified": "Your account has not been verified yet.",
-    "message": "In order to use Greenlight, please verify your account by following the instructions in the activation email that was sent to you.",
-    "resend_activation_link": "If you haven't received an activation email or if you are having a problem using it, click the resend button below to request a new activation email.",
+    "message": "In order to use Greenlight, please verify your account by following the instructions in the activation email that has been sent to you.",
+    "resend_activation_link": "If you haven't received an activation email or if you are having a problem using it, click on the button below to request a new activation email.",
     "resend_btn_lbl": "Resend Verification"
   },
   "forms": {
diff --git a/app/assets/stylesheets/application.bootstrap.scss b/app/assets/stylesheets/application.bootstrap.scss
index 1e32287f..a6f90e8e 100644
--- a/app/assets/stylesheets/application.bootstrap.scss
+++ b/app/assets/stylesheets/application.bootstrap.scss
@@ -1,5 +1,7 @@
+
 @import 'variables';
 @import 'bootstrap/scss/bootstrap';
+@import 'react-toastify/dist/ReactToastify';
 
 @import 'helpers';
 @import 'rooms';
@@ -11,6 +13,8 @@
 @import 'pagination';
 @import 'fonts';
 
+
+
 html,
 body {
   overflow-x: hidden;
diff --git a/app/javascript/App.jsx b/app/javascript/App.jsx
index 2d58ede4..73bcead8 100644
--- a/app/javascript/App.jsx
+++ b/app/javascript/App.jsx
@@ -1,8 +1,8 @@
 import React, { useEffect } from 'react';
 import { Container } from 'react-bootstrap';
 import { Outlet, useLocation } from 'react-router-dom';
-import { Toaster } from 'react-hot-toast';
 import { useTranslation } from 'react-i18next';
+import { ToastContainer } from 'react-toastify';
 import Header from './components/shared_components/Header';
 import { useAuth } from './contexts/auth/AuthProvider';
 import Footer from './components/shared_components/Footer';
@@ -36,11 +36,9 @@ export default function App() {
       <Container className={pageHeight}>
         <Outlet />
       </Container>
-      <Toaster
+      <ToastContainer
         position="bottom-right"
-        toastOptions={{
-          duration: 4000,
-        }}
+        newestOnTop
       />
       <Footer />
     </>
diff --git a/app/javascript/components/home/HomePage.jsx b/app/javascript/components/home/HomePage.jsx
index dae0f8d1..d7bc131d 100644
--- a/app/javascript/components/home/HomePage.jsx
+++ b/app/javascript/components/home/HomePage.jsx
@@ -7,7 +7,7 @@ import { useTranslation } from 'react-i18next';
 import {
   ArrowRightIcon, Cog8ToothIcon, ComputerDesktopIcon, VideoCameraIcon, WrenchScrewdriverIcon,
 } from '@heroicons/react/24/outline';
-import { toast } from 'react-hot-toast';
+import { toast } from 'react-toastify';
 import { useAuth } from '../../contexts/auth/AuthProvider';
 import HomepageFeatureCard from './HomepageFeatureCard';
 
diff --git a/app/javascript/components/recordings/RecordingRow.jsx b/app/javascript/components/recordings/RecordingRow.jsx
index 2cfadf4b..e13511fe 100644
--- a/app/javascript/components/recordings/RecordingRow.jsx
+++ b/app/javascript/components/recordings/RecordingRow.jsx
@@ -7,7 +7,7 @@ import PropTypes from 'prop-types';
 import {
   Button, Stack, Dropdown,
 } from 'react-bootstrap';
-import { toast } from 'react-hot-toast';
+import { toast } from 'react-toastify';
 import { useTranslation } from 'react-i18next';
 import Spinner from '../shared_components/utilities/Spinner';
 import UpdateRecordingForm from './forms/UpdateRecordingForm';
diff --git a/app/javascript/components/rooms/RoomCard.jsx b/app/javascript/components/rooms/RoomCard.jsx
index ad751ae2..7375016a 100644
--- a/app/javascript/components/rooms/RoomCard.jsx
+++ b/app/javascript/components/rooms/RoomCard.jsx
@@ -3,7 +3,7 @@ import { useNavigate } from 'react-router-dom';
 import { Button, Card, Stack } from 'react-bootstrap';
 import PropTypes from 'prop-types';
 import { DocumentDuplicateIcon, LinkIcon } from '@heroicons/react/24/outline';
-import { toast } from 'react-hot-toast';
+import { toast } from 'react-toastify';
 import { useTranslation } from 'react-i18next';
 import Spinner from '../shared_components/utilities/Spinner';
 import useStartMeeting from '../../hooks/mutations/rooms/useStartMeeting';
diff --git a/app/javascript/components/rooms/room/Room.jsx b/app/javascript/components/rooms/room/Room.jsx
index ed5e636c..a6510a87 100644
--- a/app/javascript/components/rooms/room/Room.jsx
+++ b/app/javascript/components/rooms/room/Room.jsx
@@ -6,7 +6,7 @@ import {
   Link, Navigate, useLocation, useParams,
 } from 'react-router-dom';
 import { HomeIcon, Square2StackIcon } from '@heroicons/react/24/outline';
-import { toast } from 'react-hot-toast';
+import { toast } from 'react-toastify';
 import { useTranslation } from 'react-i18next';
 import FeatureTabs from './FeatureTabs';
 import Spinner from '../../shared_components/utilities/Spinner';
diff --git a/app/javascript/components/rooms/room/join/RoomJoin.jsx b/app/javascript/components/rooms/room/join/RoomJoin.jsx
index df2c6c30..2472d9d8 100644
--- a/app/javascript/components/rooms/room/join/RoomJoin.jsx
+++ b/app/javascript/components/rooms/room/join/RoomJoin.jsx
@@ -7,7 +7,7 @@ import {
 import {
   Button, Col, Row, Spinner, Stack, Form as RegularForm,
 } from 'react-bootstrap';
-import toast from 'react-hot-toast';
+import { toast } from 'react-toastify';
 import { useTranslation } from 'react-i18next';
 import { useForm } from 'react-hook-form';
 import usePublicRoom from '../../../../hooks/queries/rooms/usePublicRoom';
diff --git a/app/javascript/components/rooms/room/room_settings/AccessCodeRow.jsx b/app/javascript/components/rooms/room/room_settings/AccessCodeRow.jsx
index 75c20e6c..50e5d038 100644
--- a/app/javascript/components/rooms/room/room_settings/AccessCodeRow.jsx
+++ b/app/javascript/components/rooms/room/room_settings/AccessCodeRow.jsx
@@ -2,7 +2,7 @@ import React from 'react';
 import PropTypes from 'prop-types';
 import { Button, Row, Stack } from 'react-bootstrap';
 import { TrashIcon, Square2StackIcon, ArrowPathIcon } from '@heroicons/react/24/outline';
-import { toast } from 'react-hot-toast';
+import { toast } from 'react-toastify';
 import { useTranslation } from 'react-i18next';
 
 export default function AccessCodeRow({
diff --git a/app/javascript/components/shared_components/utilities/FilesDragAndDrop.jsx b/app/javascript/components/shared_components/utilities/FilesDragAndDrop.jsx
index c278590f..18eccbf7 100644
--- a/app/javascript/components/shared_components/utilities/FilesDragAndDrop.jsx
+++ b/app/javascript/components/shared_components/utilities/FilesDragAndDrop.jsx
@@ -1,6 +1,6 @@
 import React, { useRef, useEffect } from 'react';
 import PropTypes from 'prop-types';
-import { toast } from 'react-hot-toast';
+import { toast } from 'react-toastify';
 
 export default function FilesDragAndDrop({
   onDrop, children, numOfFiles, formats,
diff --git a/app/javascript/components/shared_components/utilities/HCaptcha.jsx b/app/javascript/components/shared_components/utilities/HCaptcha.jsx
index 89d1f64d..7aba39af 100644
--- a/app/javascript/components/shared_components/utilities/HCaptcha.jsx
+++ b/app/javascript/components/shared_components/utilities/HCaptcha.jsx
@@ -1,7 +1,7 @@
 import React, { useMemo } from 'react';
 import { Container } from 'react-bootstrap';
 import OriginHCaptcha from '@hcaptcha/react-hcaptcha';
-import toast from 'react-hot-toast';
+import { toast } from 'react-toastify';
 import { useTranslation } from 'react-i18next';
 import useEnv from '../../../hooks/queries/env/useEnv';
 
@@ -26,7 +26,7 @@ function HCaptcha(_props, ref) {
     },
 
     handleVerified: () => {
-      toast.success(t('toast.success.user.challenge_passed'));
+      toast.success(t('toast.success.success'));
     },
   }), [i18n.resolvedLanguage]);
 
diff --git a/app/javascript/components/users/authentication/Signup.jsx b/app/javascript/components/users/authentication/Signup.jsx
index 26916e97..808a822f 100644
--- a/app/javascript/components/users/authentication/Signup.jsx
+++ b/app/javascript/components/users/authentication/Signup.jsx
@@ -2,7 +2,7 @@ import React from 'react';
 import { Card } from 'react-bootstrap';
 import { Navigate, Link, useSearchParams } from 'react-router-dom';
 import { useTranslation } from 'react-i18next';
-import { toast } from 'react-hot-toast';
+import { toast } from 'react-toastify';
 import SignupForm from './forms/SignupForm';
 import Logo from '../../shared_components/Logo';
 import useSiteSetting from '../../../hooks/queries/site_settings/useSiteSetting';
diff --git a/app/javascript/hooks/mutations/account_activation/useCreateActivationLink.jsx b/app/javascript/hooks/mutations/account_activation/useCreateActivationLink.jsx
index 0ac7b272..8228f1fa 100644
--- a/app/javascript/hooks/mutations/account_activation/useCreateActivationLink.jsx
+++ b/app/javascript/hooks/mutations/account_activation/useCreateActivationLink.jsx
@@ -1,4 +1,4 @@
-import toast from 'react-hot-toast';
+import { toast } from 'react-toastify';
 import { useTranslation } from 'react-i18next';
 import { useMutation } from 'react-query';
 import { useNavigate } from 'react-router-dom';
diff --git a/app/javascript/hooks/mutations/admin/manage_users/useAdminCreateUser.jsx b/app/javascript/hooks/mutations/admin/manage_users/useAdminCreateUser.jsx
index f12c541c..f68d8436 100644
--- a/app/javascript/hooks/mutations/admin/manage_users/useAdminCreateUser.jsx
+++ b/app/javascript/hooks/mutations/admin/manage_users/useAdminCreateUser.jsx
@@ -1,5 +1,5 @@
 import { useMutation, useQueryClient } from 'react-query';
-import { toast } from 'react-hot-toast';
+import { toast } from 'react-toastify';
 import { useTranslation } from 'react-i18next';
 import axios from '../../../../helpers/Axios';
 
diff --git a/app/javascript/hooks/mutations/admin/manage_users/useCreateInvitation.jsx b/app/javascript/hooks/mutations/admin/manage_users/useCreateInvitation.jsx
index ac6c6a88..be4470df 100644
--- a/app/javascript/hooks/mutations/admin/manage_users/useCreateInvitation.jsx
+++ b/app/javascript/hooks/mutations/admin/manage_users/useCreateInvitation.jsx
@@ -1,5 +1,5 @@
 import { useMutation, useQueryClient } from 'react-query';
-import { toast } from 'react-hot-toast';
+import { toast } from 'react-toastify';
 import { useTranslation } from 'react-i18next';
 import axios from '../../../../helpers/Axios';
 
diff --git a/app/javascript/hooks/mutations/admin/manage_users/useCreateServerRoom.jsx b/app/javascript/hooks/mutations/admin/manage_users/useCreateServerRoom.jsx
index ef701871..dea2fe2d 100644
--- a/app/javascript/hooks/mutations/admin/manage_users/useCreateServerRoom.jsx
+++ b/app/javascript/hooks/mutations/admin/manage_users/useCreateServerRoom.jsx
@@ -1,5 +1,5 @@
 import { useMutation, useQueryClient } from 'react-query';
-import { toast } from 'react-hot-toast';
+import { toast } from 'react-toastify';
 import { useTranslation } from 'react-i18next';
 import axios from '../../../../helpers/Axios';
 
diff --git a/app/javascript/hooks/mutations/admin/manage_users/useDeleteUser.jsx b/app/javascript/hooks/mutations/admin/manage_users/useDeleteUser.jsx
index 53eaae53..3d607bd9 100644
--- a/app/javascript/hooks/mutations/admin/manage_users/useDeleteUser.jsx
+++ b/app/javascript/hooks/mutations/admin/manage_users/useDeleteUser.jsx
@@ -1,5 +1,5 @@
 import { useMutation, useQueryClient } from 'react-query';
-import { toast } from 'react-hot-toast';
+import { toast } from 'react-toastify';
 import { useTranslation } from 'react-i18next';
 import axios from '../../../../helpers/Axios';
 
diff --git a/app/javascript/hooks/mutations/admin/manage_users/useUpdateUserStatus.jsx b/app/javascript/hooks/mutations/admin/manage_users/useUpdateUserStatus.jsx
index 7f2b5dae..52e0b285 100644
--- a/app/javascript/hooks/mutations/admin/manage_users/useUpdateUserStatus.jsx
+++ b/app/javascript/hooks/mutations/admin/manage_users/useUpdateUserStatus.jsx
@@ -1,5 +1,5 @@
 import { useMutation, useQueryClient } from 'react-query';
-import { toast } from 'react-hot-toast';
+import { toast } from 'react-toastify';
 import { useTranslation } from 'react-i18next';
 import axios from '../../../../helpers/Axios';
 
diff --git a/app/javascript/hooks/mutations/admin/role_permissions/useUpdateRolePermissions.jsx b/app/javascript/hooks/mutations/admin/role_permissions/useUpdateRolePermissions.jsx
index 9325dcd2..0df0404a 100644
--- a/app/javascript/hooks/mutations/admin/role_permissions/useUpdateRolePermissions.jsx
+++ b/app/javascript/hooks/mutations/admin/role_permissions/useUpdateRolePermissions.jsx
@@ -1,5 +1,5 @@
 import { useMutation, useQueryClient } from 'react-query';
-import { toast } from 'react-hot-toast';
+import { toast } from 'react-toastify';
 import { useTranslation } from 'react-i18next';
 import axios from '../../../../helpers/Axios';
 
diff --git a/app/javascript/hooks/mutations/admin/roles/useCreateRole.jsx b/app/javascript/hooks/mutations/admin/roles/useCreateRole.jsx
index b9a008c5..e530cca4 100644
--- a/app/javascript/hooks/mutations/admin/roles/useCreateRole.jsx
+++ b/app/javascript/hooks/mutations/admin/roles/useCreateRole.jsx
@@ -1,5 +1,5 @@
 import { useMutation, useQueryClient } from 'react-query';
-import { toast } from 'react-hot-toast';
+import { toast } from 'react-toastify';
 import { useTranslation } from 'react-i18next';
 import axios from '../../../../helpers/Axios';
 
diff --git a/app/javascript/hooks/mutations/admin/roles/useDeleteRole.jsx b/app/javascript/hooks/mutations/admin/roles/useDeleteRole.jsx
index fc6432cf..b7b3c767 100644
--- a/app/javascript/hooks/mutations/admin/roles/useDeleteRole.jsx
+++ b/app/javascript/hooks/mutations/admin/roles/useDeleteRole.jsx
@@ -1,6 +1,6 @@
 import { useMutation, useQueryClient } from 'react-query';
 import { useNavigate } from 'react-router-dom';
-import { toast } from 'react-hot-toast';
+import { toast } from 'react-toastify';
 import { useTranslation } from 'react-i18next';
 import axios from '../../../../helpers/Axios';
 
diff --git a/app/javascript/hooks/mutations/admin/roles/useUpdateRole.jsx b/app/javascript/hooks/mutations/admin/roles/useUpdateRole.jsx
index 815efaa4..493fcaa5 100644
--- a/app/javascript/hooks/mutations/admin/roles/useUpdateRole.jsx
+++ b/app/javascript/hooks/mutations/admin/roles/useUpdateRole.jsx
@@ -1,5 +1,5 @@
 import { useMutation, useQueryClient } from 'react-query';
-import { toast } from 'react-hot-toast';
+import { toast } from 'react-toastify';
 import { useTranslation } from 'react-i18next';
 import axios from '../../../../helpers/Axios';
 
diff --git a/app/javascript/hooks/mutations/admin/room_configuration/useUpdateRoomConfig.jsx b/app/javascript/hooks/mutations/admin/room_configuration/useUpdateRoomConfig.jsx
index 544d6d46..0710f658 100644
--- a/app/javascript/hooks/mutations/admin/room_configuration/useUpdateRoomConfig.jsx
+++ b/app/javascript/hooks/mutations/admin/room_configuration/useUpdateRoomConfig.jsx
@@ -1,5 +1,5 @@
 import { useMutation, useQueryClient } from 'react-query';
-import { toast } from 'react-hot-toast';
+import { toast } from 'react-toastify';
 import { useTranslation } from 'react-i18next';
 import axios from '../../../../helpers/Axios';
 
diff --git a/app/javascript/hooks/mutations/admin/server_recordings/useRecordingsReSync.jsx b/app/javascript/hooks/mutations/admin/server_recordings/useRecordingsReSync.jsx
index 58d96481..87fe0e45 100644
--- a/app/javascript/hooks/mutations/admin/server_recordings/useRecordingsReSync.jsx
+++ b/app/javascript/hooks/mutations/admin/server_recordings/useRecordingsReSync.jsx
@@ -1,5 +1,5 @@
 import { t } from 'i18next';
-import toast from 'react-hot-toast';
+import { toast } from 'react-toastify';
 import { useMutation, useQueryClient } from 'react-query';
 
 import axios from '../../../../helpers/Axios';
diff --git a/app/javascript/hooks/mutations/admin/server_rooms/useDeleteServerRoom.jsx b/app/javascript/hooks/mutations/admin/server_rooms/useDeleteServerRoom.jsx
index 3e43030c..f86cbe7a 100644
--- a/app/javascript/hooks/mutations/admin/server_rooms/useDeleteServerRoom.jsx
+++ b/app/javascript/hooks/mutations/admin/server_rooms/useDeleteServerRoom.jsx
@@ -1,5 +1,5 @@
 import { useMutation, useQueryClient } from 'react-query';
-import { toast } from 'react-hot-toast';
+import { toast } from 'react-toastify';
 import { useTranslation } from 'react-i18next';
 import axios from '../../../../helpers/Axios';
 
@@ -12,7 +12,7 @@ export default function useDeleteServerRoom({ friendlyId, onSettled }) {
     {
       onSuccess: () => {
         queryClient.invalidateQueries('getServerRooms');
-        toast.success(t('toast.success.room.server_room_deleted'));
+        toast.success(t('toast.success.room.room_deleted'));
       },
       onError: () => {
         toast.error(t('toast.error.problem_completing_action'));
diff --git a/app/javascript/hooks/mutations/admin/site_settings/useDeleteBrandingImage.jsx b/app/javascript/hooks/mutations/admin/site_settings/useDeleteBrandingImage.jsx
index 5ca960f0..a1839fe4 100644
--- a/app/javascript/hooks/mutations/admin/site_settings/useDeleteBrandingImage.jsx
+++ b/app/javascript/hooks/mutations/admin/site_settings/useDeleteBrandingImage.jsx
@@ -1,5 +1,5 @@
 import { useMutation, useQueryClient } from 'react-query';
-import { toast } from 'react-hot-toast';
+import { toast } from 'react-toastify';
 import { useTranslation } from 'react-i18next';
 import axios from '../../../../helpers/Axios';
 
diff --git a/app/javascript/hooks/mutations/admin/site_settings/useUpdateSiteSetting.jsx b/app/javascript/hooks/mutations/admin/site_settings/useUpdateSiteSetting.jsx
index 5a4a7244..cfc0237c 100644
--- a/app/javascript/hooks/mutations/admin/site_settings/useUpdateSiteSetting.jsx
+++ b/app/javascript/hooks/mutations/admin/site_settings/useUpdateSiteSetting.jsx
@@ -1,5 +1,5 @@
 import { useMutation, useQueryClient } from 'react-query';
-import { toast } from 'react-hot-toast';
+import { toast } from 'react-toastify';
 import { useTranslation } from 'react-i18next';
 import axios from '../../../../helpers/Axios';
 
diff --git a/app/javascript/hooks/mutations/recordings/useDeleteRecording.jsx b/app/javascript/hooks/mutations/recordings/useDeleteRecording.jsx
index 37046796..3782eb7b 100644
--- a/app/javascript/hooks/mutations/recordings/useDeleteRecording.jsx
+++ b/app/javascript/hooks/mutations/recordings/useDeleteRecording.jsx
@@ -1,5 +1,5 @@
 import { useMutation, useQueryClient } from 'react-query';
-import { toast } from 'react-hot-toast';
+import { toast } from 'react-toastify';
 import { useTranslation } from 'react-i18next';
 import axios from '../../../helpers/Axios';
 
diff --git a/app/javascript/hooks/mutations/recordings/useUpdateRecording.jsx b/app/javascript/hooks/mutations/recordings/useUpdateRecording.jsx
index 0bc4418a..a7aec61c 100644
--- a/app/javascript/hooks/mutations/recordings/useUpdateRecording.jsx
+++ b/app/javascript/hooks/mutations/recordings/useUpdateRecording.jsx
@@ -1,5 +1,5 @@
 import { useMutation, useQueryClient } from 'react-query';
-import { toast } from 'react-hot-toast';
+import { toast } from 'react-toastify';
 import { useTranslation } from 'react-i18next';
 import axios from '../../../helpers/Axios';
 
diff --git a/app/javascript/hooks/mutations/recordings/useUpdateRecordingVisibility.jsx b/app/javascript/hooks/mutations/recordings/useUpdateRecordingVisibility.jsx
index e8039b37..ec871f3f 100644
--- a/app/javascript/hooks/mutations/recordings/useUpdateRecordingVisibility.jsx
+++ b/app/javascript/hooks/mutations/recordings/useUpdateRecordingVisibility.jsx
@@ -1,5 +1,5 @@
 import { useMutation, useQueryClient } from 'react-query';
-import { toast } from 'react-hot-toast';
+import { toast } from 'react-toastify';
 import { useTranslation } from 'react-i18next';
 import axios from '../../../helpers/Axios';
 
diff --git a/app/javascript/hooks/mutations/room_settings/useUpdateRoomSetting.jsx b/app/javascript/hooks/mutations/room_settings/useUpdateRoomSetting.jsx
index 0a7fe2d7..787b4601 100644
--- a/app/javascript/hooks/mutations/room_settings/useUpdateRoomSetting.jsx
+++ b/app/javascript/hooks/mutations/room_settings/useUpdateRoomSetting.jsx
@@ -1,5 +1,5 @@
 import { useMutation, useQueryClient } from 'react-query';
-import { toast } from 'react-hot-toast';
+import { toast } from 'react-toastify';
 import { useTranslation } from 'react-i18next';
 import axios from '../../../helpers/Axios';
 
diff --git a/app/javascript/hooks/mutations/rooms/useCreateRoom.jsx b/app/javascript/hooks/mutations/rooms/useCreateRoom.jsx
index 3a8a63da..3812a50c 100644
--- a/app/javascript/hooks/mutations/rooms/useCreateRoom.jsx
+++ b/app/javascript/hooks/mutations/rooms/useCreateRoom.jsx
@@ -1,5 +1,5 @@
 import { useMutation, useQueryClient } from 'react-query';
-import { toast } from 'react-hot-toast';
+import { toast } from 'react-toastify';
 import { useTranslation } from 'react-i18next';
 import axios from '../../../helpers/Axios';
 
diff --git a/app/javascript/hooks/mutations/rooms/useDeleteAccessCode.jsx b/app/javascript/hooks/mutations/rooms/useDeleteAccessCode.jsx
index 4c32f3c6..2098fcaa 100644
--- a/app/javascript/hooks/mutations/rooms/useDeleteAccessCode.jsx
+++ b/app/javascript/hooks/mutations/rooms/useDeleteAccessCode.jsx
@@ -1,5 +1,5 @@
 import { useMutation, useQueryClient } from 'react-query';
-import { toast } from 'react-hot-toast';
+import { toast } from 'react-toastify';
 import { useTranslation } from 'react-i18next';
 import axios from '../../../helpers/Axios';
 
diff --git a/app/javascript/hooks/mutations/rooms/useDeletePresentation.jsx b/app/javascript/hooks/mutations/rooms/useDeletePresentation.jsx
index 1ca2af5c..577117cf 100644
--- a/app/javascript/hooks/mutations/rooms/useDeletePresentation.jsx
+++ b/app/javascript/hooks/mutations/rooms/useDeletePresentation.jsx
@@ -1,5 +1,5 @@
 import { useMutation, useQueryClient } from 'react-query';
-import { toast } from 'react-hot-toast';
+import { toast } from 'react-toastify';
 import { useTranslation } from 'react-i18next';
 import axios from '../../../helpers/Axios';
 
diff --git a/app/javascript/hooks/mutations/rooms/useDeleteRoom.jsx b/app/javascript/hooks/mutations/rooms/useDeleteRoom.jsx
index a4c20423..2a6f01b2 100644
--- a/app/javascript/hooks/mutations/rooms/useDeleteRoom.jsx
+++ b/app/javascript/hooks/mutations/rooms/useDeleteRoom.jsx
@@ -1,6 +1,6 @@
 import { useMutation, useQueryClient } from 'react-query';
 import { useNavigate } from 'react-router-dom';
-import { toast } from 'react-hot-toast';
+import { toast } from 'react-toastify';
 import { useTranslation } from 'react-i18next';
 import axios from '../../../helpers/Axios';
 
diff --git a/app/javascript/hooks/mutations/rooms/useGenerateAccessCode.jsx b/app/javascript/hooks/mutations/rooms/useGenerateAccessCode.jsx
index 2d069b96..cbdb9351 100644
--- a/app/javascript/hooks/mutations/rooms/useGenerateAccessCode.jsx
+++ b/app/javascript/hooks/mutations/rooms/useGenerateAccessCode.jsx
@@ -1,5 +1,5 @@
 import { useMutation, useQueryClient } from 'react-query';
-import { toast } from 'react-hot-toast';
+import { toast } from 'react-toastify';
 import { useTranslation } from 'react-i18next';
 import axios from '../../../helpers/Axios';
 
diff --git a/app/javascript/hooks/mutations/rooms/useRoomStatus.jsx b/app/javascript/hooks/mutations/rooms/useRoomStatus.jsx
index 72262536..5b76266d 100644
--- a/app/javascript/hooks/mutations/rooms/useRoomStatus.jsx
+++ b/app/javascript/hooks/mutations/rooms/useRoomStatus.jsx
@@ -1,4 +1,4 @@
-import toast from 'react-hot-toast';
+import { toast } from 'react-toastify';
 import { useMutation } from 'react-query';
 import { useTranslation } from 'react-i18next';
 import axios from '../../../helpers/Axios';
diff --git a/app/javascript/hooks/mutations/rooms/useStartMeeting.jsx b/app/javascript/hooks/mutations/rooms/useStartMeeting.jsx
index 2ab058e3..eb37321f 100644
--- a/app/javascript/hooks/mutations/rooms/useStartMeeting.jsx
+++ b/app/javascript/hooks/mutations/rooms/useStartMeeting.jsx
@@ -1,5 +1,5 @@
 import { useMutation } from 'react-query';
-import { toast } from 'react-hot-toast';
+import { toast } from 'react-toastify';
 import { useTranslation } from 'react-i18next';
 import axios from '../../../helpers/Axios';
 
diff --git a/app/javascript/hooks/mutations/rooms/useUpdateRoom.jsx b/app/javascript/hooks/mutations/rooms/useUpdateRoom.jsx
index 3f15ed2b..10cba20a 100644
--- a/app/javascript/hooks/mutations/rooms/useUpdateRoom.jsx
+++ b/app/javascript/hooks/mutations/rooms/useUpdateRoom.jsx
@@ -1,5 +1,5 @@
 import { useMutation, useQueryClient } from 'react-query';
-import { toast } from 'react-hot-toast';
+import { toast } from 'react-toastify';
 import { useTranslation } from 'react-i18next';
 import axios from '../../../helpers/Axios';
 
diff --git a/app/javascript/hooks/mutations/rooms/useUploadPresentation.jsx b/app/javascript/hooks/mutations/rooms/useUploadPresentation.jsx
index b157a3c3..f82a86c0 100644
--- a/app/javascript/hooks/mutations/rooms/useUploadPresentation.jsx
+++ b/app/javascript/hooks/mutations/rooms/useUploadPresentation.jsx
@@ -1,5 +1,5 @@
 import { useMutation, useQueryClient } from 'react-query';
-import { toast } from 'react-hot-toast';
+import { toast } from 'react-toastify';
 import { useTranslation } from 'react-i18next';
 import axios from '../../../helpers/Axios';
 
diff --git a/app/javascript/hooks/mutations/sessions/useCreateSession.jsx b/app/javascript/hooks/mutations/sessions/useCreateSession.jsx
index eb920c82..1a39babc 100644
--- a/app/javascript/hooks/mutations/sessions/useCreateSession.jsx
+++ b/app/javascript/hooks/mutations/sessions/useCreateSession.jsx
@@ -1,6 +1,6 @@
 import { useMutation, useQueryClient } from 'react-query';
 import { useNavigate, useSearchParams } from 'react-router-dom';
-import { toast } from 'react-hot-toast';
+import { toast } from 'react-toastify';
 import { useTranslation } from 'react-i18next';
 import axios from '../../../helpers/Axios';
 
diff --git a/app/javascript/hooks/mutations/sessions/useDeleteSession.jsx b/app/javascript/hooks/mutations/sessions/useDeleteSession.jsx
index e23bb7ce..7ebf800d 100644
--- a/app/javascript/hooks/mutations/sessions/useDeleteSession.jsx
+++ b/app/javascript/hooks/mutations/sessions/useDeleteSession.jsx
@@ -1,5 +1,5 @@
 import { useMutation, useQueryClient } from 'react-query';
-import { toast } from 'react-hot-toast';
+import { toast } from 'react-toastify';
 import { useNavigate } from 'react-router-dom';
 import { useTranslation } from 'react-i18next';
 import axios from '../../../helpers/Axios';
diff --git a/app/javascript/hooks/mutations/shared_accesses/useDeleteSharedAccess.jsx b/app/javascript/hooks/mutations/shared_accesses/useDeleteSharedAccess.jsx
index f3a5306f..93678699 100644
--- a/app/javascript/hooks/mutations/shared_accesses/useDeleteSharedAccess.jsx
+++ b/app/javascript/hooks/mutations/shared_accesses/useDeleteSharedAccess.jsx
@@ -1,5 +1,5 @@
 import { useMutation, useQueryClient } from 'react-query';
-import { toast } from 'react-hot-toast';
+import { toast } from 'react-toastify';
 import { useTranslation } from 'react-i18next';
 import axios from '../../../helpers/Axios';
 
diff --git a/app/javascript/hooks/mutations/shared_accesses/useShareAccess.jsx b/app/javascript/hooks/mutations/shared_accesses/useShareAccess.jsx
index d04b27f1..2c7e0e81 100644
--- a/app/javascript/hooks/mutations/shared_accesses/useShareAccess.jsx
+++ b/app/javascript/hooks/mutations/shared_accesses/useShareAccess.jsx
@@ -1,5 +1,5 @@
 import { useMutation, useQueryClient } from 'react-query';
-import { toast } from 'react-hot-toast';
+import { toast } from 'react-toastify';
 import { useTranslation } from 'react-i18next';
 import axios from '../../../helpers/Axios';
 
diff --git a/app/javascript/hooks/mutations/users/useActivateAccount.jsx b/app/javascript/hooks/mutations/users/useActivateAccount.jsx
index a92a4db1..dbf1416a 100644
--- a/app/javascript/hooks/mutations/users/useActivateAccount.jsx
+++ b/app/javascript/hooks/mutations/users/useActivateAccount.jsx
@@ -1,4 +1,4 @@
-import toast from 'react-hot-toast';
+import { toast } from 'react-toastify';
 import { useTranslation } from 'react-i18next';
 import { useMutation, useQueryClient } from 'react-query';
 import { useNavigate } from 'react-router-dom';
diff --git a/app/javascript/hooks/mutations/users/useChangePwd.jsx b/app/javascript/hooks/mutations/users/useChangePwd.jsx
index b21f8b2f..2b575e6d 100644
--- a/app/javascript/hooks/mutations/users/useChangePwd.jsx
+++ b/app/javascript/hooks/mutations/users/useChangePwd.jsx
@@ -1,5 +1,5 @@
 import { useMutation } from 'react-query';
-import { toast } from 'react-hot-toast';
+import { toast } from 'react-toastify';
 import { useTranslation } from 'react-i18next';
 import axios from '../../../helpers/Axios';
 
diff --git a/app/javascript/hooks/mutations/users/useCreateAvatar.jsx b/app/javascript/hooks/mutations/users/useCreateAvatar.jsx
index a7258fbb..ab246861 100644
--- a/app/javascript/hooks/mutations/users/useCreateAvatar.jsx
+++ b/app/javascript/hooks/mutations/users/useCreateAvatar.jsx
@@ -1,5 +1,5 @@
 import { useMutation, useQueryClient } from 'react-query';
-import { toast } from 'react-hot-toast';
+import { toast } from 'react-toastify';
 import { useTranslation } from 'react-i18next';
 import axios from '../../../helpers/Axios';
 
diff --git a/app/javascript/hooks/mutations/users/useCreateResetPwd.jsx b/app/javascript/hooks/mutations/users/useCreateResetPwd.jsx
index 089e31d3..98297bac 100644
--- a/app/javascript/hooks/mutations/users/useCreateResetPwd.jsx
+++ b/app/javascript/hooks/mutations/users/useCreateResetPwd.jsx
@@ -1,6 +1,6 @@
 import { useMutation } from 'react-query';
 import { useNavigate } from 'react-router-dom';
-import { toast } from 'react-hot-toast';
+import { toast } from 'react-toastify';
 import { useTranslation } from 'react-i18next';
 import axios from '../../../helpers/Axios';
 
diff --git a/app/javascript/hooks/mutations/users/useCreateUser.jsx b/app/javascript/hooks/mutations/users/useCreateUser.jsx
index 85be4614..c43984a5 100644
--- a/app/javascript/hooks/mutations/users/useCreateUser.jsx
+++ b/app/javascript/hooks/mutations/users/useCreateUser.jsx
@@ -1,6 +1,6 @@
 import { useMutation, useQueryClient } from 'react-query';
 import { useNavigate, useSearchParams } from 'react-router-dom';
-import { toast } from 'react-hot-toast';
+import { toast } from 'react-toastify';
 import { useTranslation } from 'react-i18next';
 import axios from '../../../helpers/Axios';
 
diff --git a/app/javascript/hooks/mutations/users/useDeleteAvatar.jsx b/app/javascript/hooks/mutations/users/useDeleteAvatar.jsx
index 5bd96ab3..f84a2f22 100644
--- a/app/javascript/hooks/mutations/users/useDeleteAvatar.jsx
+++ b/app/javascript/hooks/mutations/users/useDeleteAvatar.jsx
@@ -1,5 +1,5 @@
 import { useMutation, useQueryClient } from 'react-query';
-import { toast } from 'react-hot-toast';
+import { toast } from 'react-toastify';
 import { useTranslation } from 'react-i18next';
 import axios from '../../../helpers/Axios';
 
diff --git a/app/javascript/hooks/mutations/users/useDeleteUser.jsx b/app/javascript/hooks/mutations/users/useDeleteUser.jsx
index cfd92525..9b88a03e 100644
--- a/app/javascript/hooks/mutations/users/useDeleteUser.jsx
+++ b/app/javascript/hooks/mutations/users/useDeleteUser.jsx
@@ -1,6 +1,6 @@
 import { useMutation, useQueryClient } from 'react-query';
 import { useNavigate } from 'react-router-dom';
-import { toast } from 'react-hot-toast';
+import { toast } from 'react-toastify';
 import { useTranslation } from 'react-i18next';
 import axios from '../../../helpers/Axios';
 
diff --git a/app/javascript/hooks/mutations/users/useResetPwd.jsx b/app/javascript/hooks/mutations/users/useResetPwd.jsx
index f8b08aa8..266ef81a 100644
--- a/app/javascript/hooks/mutations/users/useResetPwd.jsx
+++ b/app/javascript/hooks/mutations/users/useResetPwd.jsx
@@ -1,6 +1,6 @@
 import { useMutation } from 'react-query';
 import { useNavigate } from 'react-router-dom';
-import { toast } from 'react-hot-toast';
+import { toast } from 'react-toastify';
 import { useTranslation } from 'react-i18next';
 import axios from '../../../helpers/Axios';
 
diff --git a/app/javascript/hooks/mutations/users/useUpdateUser.jsx b/app/javascript/hooks/mutations/users/useUpdateUser.jsx
index 2ba65dd6..87bbdec6 100644
--- a/app/javascript/hooks/mutations/users/useUpdateUser.jsx
+++ b/app/javascript/hooks/mutations/users/useUpdateUser.jsx
@@ -1,5 +1,5 @@
 import { useMutation, useQueryClient } from 'react-query';
-import { toast } from 'react-hot-toast';
+import { toast } from 'react-toastify';
 import { useTranslation } from 'react-i18next';
 import axios from '../../../helpers/Axios';
 
diff --git a/app/javascript/routes/AuthenticatedOnly.jsx b/app/javascript/routes/AuthenticatedOnly.jsx
index faf4b226..368b57cc 100644
--- a/app/javascript/routes/AuthenticatedOnly.jsx
+++ b/app/javascript/routes/AuthenticatedOnly.jsx
@@ -2,8 +2,8 @@ import React from 'react';
 import {
   Navigate, Outlet, useLocation, useMatch,
 } from 'react-router-dom';
-import { toast } from 'react-hot-toast';
 import { useTranslation } from 'react-i18next';
+import { toast } from 'react-toastify';
 import { useAuth } from '../contexts/auth/AuthProvider';
 import useDeleteSession from '../hooks/mutations/sessions/useDeleteSession';
 
diff --git a/package.json b/package.json
index b04242a5..a666ef24 100644
--- a/package.json
+++ b/package.json
@@ -27,11 +27,11 @@
     "react-colorful": "^5.6.1",
     "react-dom": "^17.0.2",
     "react-hook-form": "^7.28.0",
-    "react-hot-toast": "^2.2.0",
     "react-i18next": "^11.18.5",
     "react-query": "^3.34.16",
     "react-router-dom": "^6.4.3",
     "react-test-renderer": "^17.0.2",
+    "react-toastify": "^9.1.1",
     "sass": "^1.52.1",
     "semantic-ui-css": "^2.4.1",
     "semantic-ui-react": "^2.1.3",
diff --git a/yarn.lock b/yarn.lock
index d7d2a108..745cf24c 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -994,7 +994,7 @@
     core-js-pure "^3.20.2"
     regenerator-runtime "^0.13.4"
 
-"@babel/runtime@^7.10.2", "@babel/runtime@^7.10.4", "@babel/runtime@^7.10.5", "@babel/runtime@^7.12.5", "@babel/runtime@^7.13.16", "@babel/runtime@^7.15.4", "@babel/runtime@^7.16.3", "@babel/runtime@^7.17.2", "@babel/runtime@^7.17.9", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.2", "@babel/runtime@^7.6.3", "@babel/runtime@^7.7.2", "@babel/runtime@^7.7.6", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7":
+"@babel/runtime@^7.10.2", "@babel/runtime@^7.10.4", "@babel/runtime@^7.10.5", "@babel/runtime@^7.12.5", "@babel/runtime@^7.13.16", "@babel/runtime@^7.15.4", "@babel/runtime@^7.16.3", "@babel/runtime@^7.17.2", "@babel/runtime@^7.17.9", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.2", "@babel/runtime@^7.6.3", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7":
   version "7.18.3"
   resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.18.3.tgz"
   integrity sha512-38Y8f7YUhce/K7RMwTp7m0uCumpv9hZkitCbBClqQIow1qSbCvGkcegKOXpEWCQLfWmevgRiWokZ1GkpfhbZug==
@@ -1370,6 +1370,11 @@
   dependencies:
     "@babel/runtime" "^7.6.2"
 
+"@remix-run/router@1.3.1":
+  version "1.3.1"
+  resolved "https://registry.yarnpkg.com/@remix-run/router/-/router-1.3.1.tgz#3bb0b6ddc0a276e8dc1138d08f63035e4e23e8bf"
+  integrity sha512-+eun1Wtf72RNRSqgU7qM2AMX/oHp+dnx7BHk1qhK5ZHzdHTUU4LA1mGG1vT+jMc8sbhG3orvsfOmryjzx2PzQw==
+
 "@restart/hooks@^0.4.0", "@restart/hooks@^0.4.5":
   version "0.4.5"
   resolved "https://registry.npmjs.org/@restart/hooks/-/hooks-0.4.5.tgz"
@@ -3045,11 +3050,6 @@ globby@^11.0.4:
     merge2 "^1.4.1"
     slash "^3.0.0"
 
-goober@^2.1.1:
-  version "2.1.10"
-  resolved "https://registry.npmjs.org/goober/-/goober-2.1.10.tgz"
-  integrity sha512-7PpuQMH10jaTWm33sQgBQvz45pHR8N4l3Cu3WMGEWmHShAcTuuP7I+5/DwKo39fwti5A80WAjvqgz6SSlgWmGA==
-
 graceful-fs@^4.2.9:
   version "4.2.9"
   resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz"
@@ -3089,13 +3089,6 @@ has@^1.0.3:
   dependencies:
     function-bind "^1.1.1"
 
-history@^5.2.0:
-  version "5.3.0"
-  resolved "https://registry.npmjs.org/history/-/history-5.3.0.tgz"
-  integrity sha512-ZqaKwjjrAYUYfLG+htGaIIZ4nioX2L70ZUMIFysS3xvBsSG4x/n1V6TXV3N8ZYNuFGlDirFg32T7B6WOUPDYcQ==
-  dependencies:
-    "@babel/runtime" "^7.7.6"
-
 html-encoding-sniffer@^2.0.1:
   version "2.0.1"
   resolved "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz"
@@ -4485,13 +4478,6 @@ react-hook-form@^7.28.0:
   resolved "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.28.0.tgz"
   integrity sha512-mmLpT86BkMGPr0r6ca8zxV0WH4Y1FW5MKs7Rq1+uHLVeeg5pSWbF5Z/qLCnM5vPVblHNM6lRBRRotnfEAf0ALA==
 
-react-hot-toast@^2.2.0:
-  version "2.2.0"
-  resolved "https://registry.npmjs.org/react-hot-toast/-/react-hot-toast-2.2.0.tgz"
-  integrity sha512-248rXw13uhf/6TNDVzagX+y7R8J183rp7MwUMNkcrBRyHj/jWOggfXTGlM8zAOuh701WyVW+eUaWG2LeSufX9g==
-  dependencies:
-    goober "^2.1.1"
-
 react-i18next@^11.18.5:
   version "11.18.5"
   resolved "https://registry.yarnpkg.com/react-i18next/-/react-i18next-11.18.5.tgz#985e87bc66ed1316381b464a4ecfd35a2c951357"
@@ -4532,20 +4518,20 @@ react-query@^3.34.16:
     broadcast-channel "^3.4.1"
     match-sorter "^6.0.2"
 
-react-router-dom@^6.2.2:
-  version "6.2.2"
-  resolved "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.2.2.tgz"
-  integrity sha512-AtYEsAST7bDD4dLSQHDnk/qxWLJdad5t1HFa1qJyUrCeGgEuCSw0VB/27ARbF9Fi/W5598ujvJOm3ujUCVzuYQ==
+react-router-dom@^6.4.3:
+  version "6.8.0"
+  resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-6.8.0.tgz#5e5f4c4b15fdec3965d2ad9d7460d0c61971e744"
+  integrity sha512-hQouduSTywGJndE86CXJ2h7YEy4HYC6C/uh19etM+79FfQ6cFFFHnHyDlzO4Pq0eBUI96E4qVE5yUjA00yJZGQ==
   dependencies:
-    history "^5.2.0"
-    react-router "6.2.2"
+    "@remix-run/router" "1.3.1"
+    react-router "6.8.0"
 
-react-router@6.2.2:
-  version "6.2.2"
-  resolved "https://registry.npmjs.org/react-router/-/react-router-6.2.2.tgz"
-  integrity sha512-/MbxyLzd7Q7amp4gDOGaYvXwhEojkJD5BtExkuKmj39VEE0m3l/zipf6h2WIB2jyAO0lI6NGETh4RDcktRm4AQ==
+react-router@6.8.0:
+  version "6.8.0"
+  resolved "https://registry.yarnpkg.com/react-router/-/react-router-6.8.0.tgz#dd61fd1ec44daa2cceaef8e6baa00f99a01a650f"
+  integrity sha512-760bk7y3QwabduExtudhWbd88IBbuD1YfwzpuDUAlJUJ7laIIcqhMvdhSVh1Fur1PE8cGl84L0dxhR3/gvHF7A==
   dependencies:
-    history "^5.2.0"
+    "@remix-run/router" "1.3.1"
 
 react-shallow-renderer@^16.13.1:
   version "16.15.0"
@@ -4565,6 +4551,13 @@ react-test-renderer@^17.0.2:
     react-shallow-renderer "^16.13.1"
     scheduler "^0.20.2"
 
+react-toastify@^9.1.1:
+  version "9.1.1"
+  resolved "https://registry.yarnpkg.com/react-toastify/-/react-toastify-9.1.1.tgz#9280caea4a13dc1739c350d90660a630807bf10b"
+  integrity sha512-pkFCla1z3ve045qvjEmn2xOJOy4ZciwRXm1oMPULVkELi5aJdHCN/FHnuqXq8IwGDLB7PPk2/J6uP9D8ejuiRw==
+  dependencies:
+    clsx "^1.1.1"
+
 react-transition-group@^4.4.2:
   version "4.4.2"
   resolved "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.2.tgz"
-- 
GitLab