From 839717c9613832cd8529dedd4decb5057255e74b Mon Sep 17 00:00:00 2001
From: Nick Fitzpatrick <nick@metabase.com>
Date: Fri, 23 Aug 2024 11:57:52 -0300
Subject: [PATCH] Fix `padding` prop on Mantine Modals (#46900)

* move default modal padding to general modal component

* small adjustments. Using base modal where apropriate

* shame
---
 .../components/UserProvisioningModals.tsx     | 41 +++++++----------
 .../components/DatabaseList/DatabaseList.jsx  | 46 ++++++++-----------
 .../components/ApiKeys/CreateApiKeyModal.tsx  |  1 -
 .../components/ApiKeys/DeleteApiKeyModal.tsx  |  8 +---
 .../components/ApiKeys/EditApiKeyModal.tsx    |  1 -
 .../components/ApiKeys/SecretKeyModal.tsx     |  1 -
 .../components/CloudPanel/MigrationStart.tsx  |  2 +-
 .../containers/CreateCollectionModal.tsx      | 25 ++++------
 .../ErrorPages/ErrorDiagnosticModal.tsx       |  1 -
 .../SaveQuestionModal/SaveQuestionModal.tsx   |  5 +-
 .../overlays/Modal/Modal.styled.tsx           |  9 ++--
 11 files changed, 52 insertions(+), 88 deletions(-)

diff --git a/enterprise/frontend/src/metabase-enterprise/user_provisioning/components/UserProvisioningModals.tsx b/enterprise/frontend/src/metabase-enterprise/user_provisioning/components/UserProvisioningModals.tsx
index ddce9d2ad47..3965b6db6c2 100644
--- a/enterprise/frontend/src/metabase-enterprise/user_provisioning/components/UserProvisioningModals.tsx
+++ b/enterprise/frontend/src/metabase-enterprise/user_provisioning/components/UserProvisioningModals.tsx
@@ -10,23 +10,6 @@ import { ScimTextWarning } from "./ScimTextWarning";
 
 type BaseUserProvisiongModalProps = Pick<ModalProps, "opened" | "onClose">;
 
-interface ScimModalProps extends BaseUserProvisiongModalProps {
-  title: string;
-  children: React.ReactNode;
-}
-
-const ScimModal = ({ opened, onClose, title, children }: ScimModalProps) => (
-  <Modal.Root opened={opened} onClose={onClose} size="35rem">
-    <Modal.Overlay />
-    <Modal.Content p="md">
-      <Modal.Header mb="sm">
-        <Modal.Title>{title}</Modal.Title>
-      </Modal.Header>
-      <Modal.Body>{children}</Modal.Body>
-    </Modal.Content>
-  </Modal.Root>
-);
-
 interface UserProvisioningFirstEnabledModalProps
   extends BaseUserProvisiongModalProps {
   scimBaseUrl: string;
@@ -42,7 +25,9 @@ export const UserProvisioningFirstEnabledModal = ({
   scimError,
 }: UserProvisioningFirstEnabledModalProps) => {
   return (
-    <ScimModal
+    <Modal
+      padding="2rem"
+      size="35rem"
       opened={opened}
       onClose={onClose}
       title={t`Here's what you'll need to set SCIM up`}
@@ -70,7 +55,7 @@ export const UserProvisioningFirstEnabledModal = ({
           </Button>
         </Flex>
       </Stack>
-    </ScimModal>
+    </Modal>
   );
 };
 
@@ -99,7 +84,13 @@ export const UserProvisioningRegenerateTokenModal = ({
 
   if (!confirmed) {
     return (
-      <ScimModal opened={opened} onClose={onClose} title={t`Regenerate token?`}>
+      <Modal
+        size="35rem"
+        padding="2rem"
+        opened={opened}
+        onClose={onClose}
+        title={t`Regenerate token?`}
+      >
         <Stack spacing="lg">
           <Text>
             {/* eslint-disable-next-line no-literal-metabase-strings -- in admin settings */}
@@ -112,19 +103,21 @@ export const UserProvisioningRegenerateTokenModal = ({
             </Button>
           </Flex>
         </Stack>
-      </ScimModal>
+      </Modal>
     );
   }
 
   const scimTokenInputText = regenerateTokenReq.data?.unmasked_key ?? "";
 
   return (
-    <ScimModal
+    <Modal
+      size="35rem"
+      padding="2rem"
       opened={opened}
       onClose={onClose}
       title={t`Copy and save the SCIM token`}
     >
-      <Stack spacing="lg">
+      <Stack spacing="lg" mt="0.5rem">
         <LoadingAndErrorWrapper
           error={regenerateTokenReq.error}
           loading={regenerateTokenReq.isLoading}
@@ -148,6 +141,6 @@ export const UserProvisioningRegenerateTokenModal = ({
           )}
         </Flex>
       </Stack>
-    </ScimModal>
+    </Modal>
   );
 };
diff --git a/frontend/src/metabase/admin/databases/components/DatabaseList/DatabaseList.jsx b/frontend/src/metabase/admin/databases/components/DatabaseList/DatabaseList.jsx
index e375fc7224f..4f5de9508b8 100644
--- a/frontend/src/metabase/admin/databases/components/DatabaseList/DatabaseList.jsx
+++ b/frontend/src/metabase/admin/databases/components/DatabaseList/DatabaseList.jsx
@@ -163,37 +163,29 @@ export default class DatabaseList extends Component {
           ) : null}
         </section>
 
-        {/* Needed to make this a composed modal to get the padding we wanted.
-            Not sure why the padding prop didn't work */}
-        <Modal.Root
+        <Modal
           opened={isPermissionModalOpened}
           size={620}
           withCloseButton={false}
+          title={t`Your database was added! Want to configure permissions?`}
+          padding="2rem"
         >
-          <Modal.Overlay />
-          <Modal.Content p="1rem">
-            <Modal.Header>
-              <Modal.Title fz="1.25rem">{t`Your database was added! Want to configure permissions?`}</Modal.Title>
-            </Modal.Header>
-            <Modal.Body>
-              <Text
-                mb="1.5rem"
-                mt="1rem"
-              >{t`You can change these settings later in the Permissions tab. Do you want to configure it?`}</Text>
-              <Flex justify="end">
-                <Button
-                  mr="0.5rem"
-                  onClick={this.onPermissionModalClose}
-                >{t`Maybe later`}</Button>
-                <Button
-                  component={Link}
-                  variant="filled"
-                  to={`/admin/permissions/data/database/${createdDbId}`}
-                >{t`Configure permissions`}</Button>
-              </Flex>
-            </Modal.Body>
-          </Modal.Content>
-        </Modal.Root>
+          <Text
+            mb="1.5rem"
+            mt="1rem"
+          >{t`You can change these settings later in the Permissions tab. Do you want to configure it?`}</Text>
+          <Flex justify="end">
+            <Button
+              mr="0.5rem"
+              onClick={this.onPermissionModalClose}
+            >{t`Maybe later`}</Button>
+            <Button
+              component={Link}
+              variant="filled"
+              to={`/admin/permissions/data/database/${createdDbId}`}
+            >{t`Configure permissions`}</Button>
+          </Flex>
+        </Modal>
       </div>
     );
   }
diff --git a/frontend/src/metabase/admin/settings/components/ApiKeys/CreateApiKeyModal.tsx b/frontend/src/metabase/admin/settings/components/ApiKeys/CreateApiKeyModal.tsx
index d7231f3d837..be5cc598b5a 100644
--- a/frontend/src/metabase/admin/settings/components/ApiKeys/CreateApiKeyModal.tsx
+++ b/frontend/src/metabase/admin/settings/components/ApiKeys/CreateApiKeyModal.tsx
@@ -39,7 +39,6 @@ export const CreateApiKeyModal = ({ onClose }: { onClose: () => void }) => {
     return (
       <Modal
         size="30rem"
-        padding="xl"
         opened
         onClose={onClose}
         title={t`Create a new API Key`}
diff --git a/frontend/src/metabase/admin/settings/components/ApiKeys/DeleteApiKeyModal.tsx b/frontend/src/metabase/admin/settings/components/ApiKeys/DeleteApiKeyModal.tsx
index 5a6a66d9a42..e6323dcf979 100644
--- a/frontend/src/metabase/admin/settings/components/ApiKeys/DeleteApiKeyModal.tsx
+++ b/frontend/src/metabase/admin/settings/components/ApiKeys/DeleteApiKeyModal.tsx
@@ -26,13 +26,7 @@ export const DeleteApiKeyModal = ({
   }, [onClose, apiKey.id, deleteApiKey]);
 
   return (
-    <Modal
-      size="30rem"
-      padding="xl"
-      opened
-      onClose={onClose}
-      title={t`Delete API Key`}
-    >
+    <Modal size="30rem" opened onClose={onClose} title={t`Delete API Key`}>
       <FormProvider initialValues={{}} onSubmit={handleDelete}>
         <Form>
           <Stack spacing="lg">
diff --git a/frontend/src/metabase/admin/settings/components/ApiKeys/EditApiKeyModal.tsx b/frontend/src/metabase/admin/settings/components/ApiKeys/EditApiKeyModal.tsx
index 47be7965ada..eb5cfd6e416 100644
--- a/frontend/src/metabase/admin/settings/components/ApiKeys/EditApiKeyModal.tsx
+++ b/frontend/src/metabase/admin/settings/components/ApiKeys/EditApiKeyModal.tsx
@@ -43,7 +43,6 @@ const RegenerateKeyModal = ({
   return (
     <Modal
       size="30rem"
-      padding="xl"
       opened
       onClose={() => setModal("edit")}
       title={t`Regenerate API key`}
diff --git a/frontend/src/metabase/admin/settings/components/ApiKeys/SecretKeyModal.tsx b/frontend/src/metabase/admin/settings/components/ApiKeys/SecretKeyModal.tsx
index 3db85276f53..87ddf8fdef5 100644
--- a/frontend/src/metabase/admin/settings/components/ApiKeys/SecretKeyModal.tsx
+++ b/frontend/src/metabase/admin/settings/components/ApiKeys/SecretKeyModal.tsx
@@ -16,7 +16,6 @@ export const SecretKeyModal = ({
 }) => (
   <Modal
     size="30rem"
-    padding="xl"
     zIndex={DEFAULT_Z_INDEX} // prevents CopyWidgetButton's Tippy popover from being obscured
     opened
     onClose={onClose}
diff --git a/frontend/src/metabase/admin/settings/components/CloudPanel/MigrationStart.tsx b/frontend/src/metabase/admin/settings/components/CloudPanel/MigrationStart.tsx
index ae145b7c9c8..5103c87e7cf 100644
--- a/frontend/src/metabase/admin/settings/components/CloudPanel/MigrationStart.tsx
+++ b/frontend/src/metabase/admin/settings/components/CloudPanel/MigrationStart.tsx
@@ -45,7 +45,7 @@ export const MigrationStart = ({
       <Modal.Root
         opened={isModalOpen}
         onClose={closeModal}
-        size={"36rem"}
+        size="36rem"
         data-testid="new-cloud-migration-confirmation"
       >
         <Modal.Overlay />
diff --git a/frontend/src/metabase/collections/containers/CreateCollectionModal.tsx b/frontend/src/metabase/collections/containers/CreateCollectionModal.tsx
index 01c495a6e0f..bbffd11f3f2 100644
--- a/frontend/src/metabase/collections/containers/CreateCollectionModal.tsx
+++ b/frontend/src/metabase/collections/containers/CreateCollectionModal.tsx
@@ -46,27 +46,20 @@ function CreateCollectionModal({
   );
 
   return (
-    <Modal.Root
+    <Modal
       opened
       onClose={onClose}
       size="lg"
       data-testid="new-collection-modal"
+      padding="40px"
+      title={t`New collection`}
     >
-      <Modal.Overlay />
-      <Modal.Content p="md">
-        <Modal.Header>
-          <Modal.Title>{t`New collection`}</Modal.Title>
-          <Modal.CloseButton />
-        </Modal.Header>
-        <Modal.Body>
-          <CreateCollectionForm
-            {...props}
-            onCreate={handleCreate}
-            onCancel={onClose}
-          />
-        </Modal.Body>
-      </Modal.Content>
-    </Modal.Root>
+      <CreateCollectionForm
+        {...props}
+        onCreate={handleCreate}
+        onCancel={onClose}
+      />
+    </Modal>
   );
 }
 
diff --git a/frontend/src/metabase/components/ErrorPages/ErrorDiagnosticModal.tsx b/frontend/src/metabase/components/ErrorPages/ErrorDiagnosticModal.tsx
index 6c83352a7e4..f2f498ccfb9 100644
--- a/frontend/src/metabase/components/ErrorPages/ErrorDiagnosticModal.tsx
+++ b/frontend/src/metabase/components/ErrorPages/ErrorDiagnosticModal.tsx
@@ -72,7 +72,6 @@ export const ErrorDiagnosticModal = ({
       opened
       onClose={onClose}
       title={t`Download diagnostic information`}
-      padding="xl"
       size="lg"
     >
       <FormProvider
diff --git a/frontend/src/metabase/containers/SaveQuestionModal/SaveQuestionModal.tsx b/frontend/src/metabase/containers/SaveQuestionModal/SaveQuestionModal.tsx
index 3536cbaecca..f51d13a9dc5 100644
--- a/frontend/src/metabase/containers/SaveQuestionModal/SaveQuestionModal.tsx
+++ b/frontend/src/metabase/containers/SaveQuestionModal/SaveQuestionModal.tsx
@@ -27,10 +27,9 @@ export const SaveQuestionModal = ({
     multiStep={multiStep}
     initialCollectionId={initialCollectionId}
   >
-    <Modal.Root onClose={onCancel} opened={true}>
+    <Modal.Root onClose={onCancel} opened={true} padding="40px">
       <Modal.Overlay />
-
-      <Modal.Content p="md" data-testid="save-question-modal">
+      <Modal.Content data-testid="save-question-modal">
         <Modal.Header>
           <Modal.Title>
             <SaveQuestionTitle />
diff --git a/frontend/src/metabase/ui/components/overlays/Modal/Modal.styled.tsx b/frontend/src/metabase/ui/components/overlays/Modal/Modal.styled.tsx
index 7413859a2dd..b75010e921c 100644
--- a/frontend/src/metabase/ui/components/overlays/Modal/Modal.styled.tsx
+++ b/frontend/src/metabase/ui/components/overlays/Modal/Modal.styled.tsx
@@ -7,6 +7,9 @@ const DEFAULT_MODAL_SPACING = "lg";
 
 export const getModalOverrides = (): MantineThemeOverride["components"] => ({
   Modal: {
+    defaultProps: {
+      padding: DEFAULT_MODAL_SPACING,
+    },
     styles: theme => ({
       root: {
         color: "var(--mb-color-text-dark)",
@@ -34,15 +37,9 @@ export const getModalOverrides = (): MantineThemeOverride["components"] => ({
   },
   ModalHeader: {
     defaultProps: {
-      p: DEFAULT_MODAL_SPACING,
       pb: "sm",
     },
   },
-  ModalBody: {
-    defaultProps: {
-      p: DEFAULT_MODAL_SPACING,
-    },
-  },
   ModalCloseButton: {
     defaultProps: {
       "aria-label": t`Close`,
-- 
GitLab