From 37e9027cda925981601736d91787203cb3e5973a Mon Sep 17 00:00:00 2001
From: Piotr Gawron <p.gawron@atcomp.pl>
Date: Fri, 7 Jun 2024 13:13:03 +0200
Subject: [PATCH] go back and login button on access denied

---
 .../AccessDeniedModal.component.tsx           | 45 ++++++++++++++++---
 .../ModalLayout/ModalLayout.component.tsx     |  6 ++-
 src/constants/common.ts                       |  2 +
 3 files changed, 45 insertions(+), 8 deletions(-)

diff --git a/src/components/FunctionalArea/Modal/AccessDeniedModal/AccessDeniedModal.component.tsx b/src/components/FunctionalArea/Modal/AccessDeniedModal/AccessDeniedModal.component.tsx
index 3b0b9333..970bff09 100644
--- a/src/components/FunctionalArea/Modal/AccessDeniedModal/AccessDeniedModal.component.tsx
+++ b/src/components/FunctionalArea/Modal/AccessDeniedModal/AccessDeniedModal.component.tsx
@@ -1,14 +1,47 @@
-import Link from 'next/link';
 import React from 'react';
+import { useAppDispatch } from '@/redux/hooks/useAppDispatch';
+import { useAppSelector } from '@/redux/hooks/useAppSelector';
+import { loginUserSelector } from '@/redux/user/user.selectors';
+import { openLoginModal } from '@/redux/modal/modal.slice';
+import { MINUS_ONE } from '@/constants/common';
+import { Button } from '@/shared/Button';
 
 export const AccessDeniedModal: React.FC = () => {
+  const dispatch = useAppDispatch();
+  const login = useAppSelector(loginUserSelector);
+
+  const isAnonymousLogin = !login;
+
+  const handleGoBack = async (e: React.FormEvent<HTMLButtonElement>): Promise<void> => {
+    e.preventDefault();
+    window.history.go(MINUS_ONE);
+  };
+
+  const handleLogin = async (e: React.FormEvent<HTMLButtonElement>): Promise<void> => {
+    e.preventDefault();
+    dispatch(openLoginModal());
+  };
+
   return (
     <div className="w-[400px] border border-t-[#E1E0E6] bg-white p-[24px]">
-      <div className="mb-10 text-right">
-        <Link href="/" className="ml-auto text-xs">
-          Contact admin
-        </Link>
-      </div>
+      {isAnonymousLogin && (
+        <div className="grid grid-cols-2 gap-2">
+          <div className="mb-10">
+            <Button
+              className="ring-transparent hover:ring-transparent"
+              variantStyles="secondary"
+              onClick={handleGoBack}
+            >
+              Go back to previous page
+            </Button>
+          </div>
+          <div className="mb-10">
+            <Button className="w-full text-center" onClick={handleLogin}>
+              Login to your account
+            </Button>
+          </div>
+        </div>
+      )}
     </div>
   );
 };
diff --git a/src/components/FunctionalArea/Modal/ModalLayout/ModalLayout.component.tsx b/src/components/FunctionalArea/Modal/ModalLayout/ModalLayout.component.tsx
index 044fc845..b2630c62 100644
--- a/src/components/FunctionalArea/Modal/ModalLayout/ModalLayout.component.tsx
+++ b/src/components/FunctionalArea/Modal/ModalLayout/ModalLayout.component.tsx
@@ -34,13 +34,15 @@ export const ModalLayout = ({ children }: ModalLayoutProps): JSX.Element => {
           )}
         >
           <div className="flex items-center justify-between bg-white p-[24px] text-xl">
-            {modalName === 'error-report' && (
+            {(modalName === 'error-report' || modalName === 'access-denied') && (
               <div className="font-bold text-red-500">
                 <Icon name="info" className={twMerge('mr-4 fill-red-500')} />
                 {modalTitle}
               </div>
             )}
-            {modalName !== 'error-report' && <div> {modalTitle} </div>}
+            {modalName !== 'error-report' && modalName !== 'access-denied' && (
+              <div> {modalTitle} </div>
+            )}
 
             {modalName !== 'logged-in-menu' && (
               <button type="button" onClick={handleCloseModal} aria-label="close button">
diff --git a/src/constants/common.ts b/src/constants/common.ts
index c3a1b1d0..9bdcd648 100644
--- a/src/constants/common.ts
+++ b/src/constants/common.ts
@@ -2,6 +2,8 @@ export const SIZE_OF_EMPTY_ARRAY = 0;
 export const SIZE_OF_ARRAY_WITH_FOUR_ELEMENTS = 4;
 export const SIZE_OF_ARRAY_WITH_ONE_ELEMENT = 1;
 
+export const MINUS_ONE = -1;
+
 export const ZERO = 0;
 export const FIRST_ARRAY_ELEMENT = 0;
 
-- 
GitLab