From 04dc4fe861c92f523183fa1a3051b33a73cf57c6 Mon Sep 17 00:00:00 2001
From: William Grant <willmgrant@gmail.com>
Date: Fri, 26 Apr 2024 18:58:13 +1000
Subject: [PATCH] fix: the modal header now always centers content correctly

---
 stylesheets/_session.scss             | 42 +--------------
 ts/components/SessionWrapperModal.tsx | 77 ++++++++++++++++++++-------
 2 files changed, 60 insertions(+), 59 deletions(-)

diff --git a/stylesheets/_session.scss b/stylesheets/_session.scss
index 3ac42138b..2e9da6cc2 100644
--- a/stylesheets/_session.scss
+++ b/stylesheets/_session.scss
@@ -188,49 +188,11 @@ label {
   flex-direction: column;
 
   &__header {
-    display: flex;
-    flex-direction: row;
-    justify-content: space-between;
-    align-items: center;
-
-    padding: var(--margins-lg);
-
     font-family: var(--font-default);
-    text-align: center;
-    line-height: 18px;
     font-size: var(--font-size-lg);
     font-weight: 500;
-
-    &.reverse {
-      flex-direction: row-reverse;
-
-      .session-modal__header__close > div {
-        float: right;
-      }
-
-      .session-modal__header__icons > div {
-        float: left;
-        padding-inline-start: 0px;
-        padding-inline-end: 10px;
-      }
-    }
-
-    &__icons,
-    &__close {
-      width: 60px;
-    }
-    &__icons {
-      float: right;
-    }
-    &__close > div {
-      float: left;
-      padding: var(--margins-xs);
-      margin: 0px;
-    }
-    &__icons > div {
-      float: right;
-      padding-inline-start: 10px;
-    }
+    text-align: center;
+    line-height: 18px;
   }
 
   &__body {
diff --git a/ts/components/SessionWrapperModal.tsx b/ts/components/SessionWrapperModal.tsx
index 775160a8f..e20c249e8 100644
--- a/ts/components/SessionWrapperModal.tsx
+++ b/ts/components/SessionWrapperModal.tsx
@@ -4,8 +4,10 @@ import useKey from 'react-use/lib/useKey';
 
 import { SessionIconButton } from './icon';
 
-import { SessionButton, SessionButtonColor, SessionButtonType } from './basic/SessionButton';
 import { SessionFocusTrap } from './SessionFocusTrap';
+import { Flex } from './basic/Flex';
+import { SessionButton, SessionButtonColor, SessionButtonType } from './basic/SessionButton';
+import { SpacerXL } from './basic/Text';
 
 export type SessionWrapperModalType = {
   title?: string;
@@ -73,34 +75,71 @@ export const SessionWrapperModal = (props: SessionWrapperModalType) => {
         <div className="session-confirm-wrapper">
           <div ref={modalRef} className="session-modal">
             {showHeader ? (
-              <div className={classNames('session-modal__header', headerReverse && 'reverse')}>
-                <div className="session-modal__header__close">
+              <Flex
+                container={true}
+                flexDirection={headerReverse ? 'row-reverse' : 'row'}
+                justifyContent={'space-between'}
+                alignItems={'center'}
+                padding={'var(--margins-lg)'}
+                className={'session-modal__header'}
+              >
+                <Flex
+                  container={true}
+                  flexDirection={headerReverse ? 'row-reverse' : 'row'}
+                  alignItems={'center'}
+                  padding={'0'}
+                  margin={'0'}
+                  className={'session-modal__header__close'}
+                >
                   {showExitIcon ? (
                     <SessionIconButton
                       iconType="exit"
                       iconSize="small"
                       onClick={props.onClose}
+                      padding={'5px'}
+                      margin={'0'}
                       dataTestId="modal-close-button"
                     />
                   ) : null}
-                </div>
-                <div className="session-modal__header__title">{title}</div>
-                <div className="session-modal__header__icons">
-                  {headerIconButtons
-                    ? headerIconButtons.map((iconItem: any) => {
-                        return (
-                          <SessionIconButton
-                            key={iconItem.iconType}
-                            iconType={iconItem.iconType}
-                            iconSize={'large'}
-                            iconRotation={iconItem.iconRotation}
-                            onClick={iconItem.onClick}
-                          />
-                        );
+                  {headerIconButtons?.length
+                    ? headerIconButtons.map((_, index) => {
+                        const offset = showExitIcon
+                          ? headerIconButtons.length - 2
+                          : headerIconButtons.length - 1;
+                        if (index > offset) {
+                          return null;
+                        }
+                        return <SpacerXL key={`session-modal__header_space-${index}`} />;
                       })
                     : null}
-                </div>
-              </div>
+                </Flex>
+                <div className="session-modal__header__title">{title}</div>
+                <Flex
+                  container={true}
+                  flexDirection={headerReverse ? 'row-reverse' : 'row'}
+                  alignItems={'center'}
+                  padding={'0'}
+                  margin={'0'}
+                >
+                  {headerIconButtons?.length ? (
+                    headerIconButtons.map((iconItem: any) => {
+                      return (
+                        <SessionIconButton
+                          key={iconItem.iconType}
+                          iconType={iconItem.iconType}
+                          iconSize={'large'}
+                          iconRotation={iconItem.iconRotation}
+                          onClick={iconItem.onClick}
+                          padding={'0'}
+                          margin={'0'}
+                        />
+                      );
+                    })
+                  ) : showExitIcon ? (
+                    <SpacerXL />
+                  ) : null}
+                </Flex>
+              </Flex>
             ) : null}
 
             <div className="session-modal__body">