From 63295cefc6a4f4440a955e7ac99da41a0131907e Mon Sep 17 00:00:00 2001
From: Ryan Laurie <30528226+iethree@users.noreply.github.com>
Date: Mon, 12 Aug 2024 17:02:55 -0600
Subject: [PATCH] Remove unnecessary api call from create collection form
 (#46736)

---
 frontend/src/metabase/api/collection.ts       |  4 +++
 .../CreateCollectionForm.tsx                  |  8 ++---
 .../FormAuthorityLevelFieldContainer.tsx      | 33 ++-----------------
 3 files changed, 10 insertions(+), 35 deletions(-)

diff --git a/frontend/src/metabase/api/collection.ts b/frontend/src/metabase/api/collection.ts
index 0c23a270428..5ae6b29f398 100644
--- a/frontend/src/metabase/api/collection.ts
+++ b/frontend/src/metabase/api/collection.ts
@@ -26,6 +26,10 @@ import {
 
 export const collectionApi = Api.injectEndpoints({
   endpoints: builder => ({
+    /**
+     * @deprecated This endpoint is extremely slow on large instances, it should not be used
+     * you probably only need a few collections, just fetch those
+     */
     listCollections: builder.query<Collection[], ListCollectionsRequest>({
       query: params => ({
         method: "GET",
diff --git a/frontend/src/metabase/collections/components/CreateCollectionForm/CreateCollectionForm.tsx b/frontend/src/metabase/collections/components/CreateCollectionForm/CreateCollectionForm.tsx
index 1b387ecd60d..35dd389d02e 100644
--- a/frontend/src/metabase/collections/components/CreateCollectionForm/CreateCollectionForm.tsx
+++ b/frontend/src/metabase/collections/components/CreateCollectionForm/CreateCollectionForm.tsx
@@ -22,7 +22,7 @@ import * as Errors from "metabase/lib/errors";
 import type { Collection } from "metabase-types/api";
 import type { State } from "metabase-types/store";
 
-import FormAuthorityLevelFieldContainer from "../../containers/FormAuthorityLevelFieldContainer";
+import { FormAuthorityLevelField } from "../../containers/FormAuthorityLevelFieldContainer";
 
 const COLLECTION_SCHEMA = Yup.object({
   name: Yup.string()
@@ -111,7 +111,7 @@ function CreateCollectionForm({
       validationSchema={COLLECTION_SCHEMA}
       onSubmit={handleCreate}
     >
-      {({ dirty, values }) => (
+      {({ dirty }) => (
         <Form>
           <FormInput
             name="name"
@@ -131,9 +131,7 @@ function CreateCollectionForm({
             title={t`Collection it's saved in`}
             filterPersonalCollections={filterPersonalCollections}
           />
-          <FormAuthorityLevelFieldContainer
-            collectionParentId={values.parent_id}
-          />
+          <FormAuthorityLevelField />
           <FormFooter>
             <FormErrorMessage inline />
             {!!onCancel && (
diff --git a/frontend/src/metabase/collections/containers/FormAuthorityLevelFieldContainer.tsx b/frontend/src/metabase/collections/containers/FormAuthorityLevelFieldContainer.tsx
index 0d1a7dcf5e5..f8c9013250a 100644
--- a/frontend/src/metabase/collections/containers/FormAuthorityLevelFieldContainer.tsx
+++ b/frontend/src/metabase/collections/containers/FormAuthorityLevelFieldContainer.tsx
@@ -1,31 +1,11 @@
-import { connect } from "react-redux";
 import _ from "underscore";
 
-import Collections from "metabase/entities/collections";
+import { useSelector } from "metabase/lib/redux";
 import { PLUGIN_COLLECTION_COMPONENTS } from "metabase/plugins";
 import { getUserIsAdmin } from "metabase/selectors/user";
-import type { Collection } from "metabase-types/api";
-import type { State } from "metabase-types/store";
 
-interface OwnProps {
-  collectionParentId: Collection["id"];
-}
-
-interface StateProps {
-  isAdmin: boolean;
-}
-
-type FormAuthorityLevelFieldContainerProps = OwnProps & StateProps;
-
-function mapStateToProps(state: State): StateProps {
-  return {
-    isAdmin: getUserIsAdmin(state),
-  };
-}
-
-function FormAuthorityLevelFieldContainer({
-  isAdmin,
-}: FormAuthorityLevelFieldContainerProps) {
+export function FormAuthorityLevelField() {
+  const isAdmin = useSelector(getUserIsAdmin);
   if (!isAdmin) {
     return null;
   }
@@ -34,10 +14,3 @@ function FormAuthorityLevelFieldContainer({
     <PLUGIN_COLLECTION_COMPONENTS.FormCollectionAuthorityLevelPicker name="authority_level" />
   );
 }
-
-// eslint-disable-next-line import/no-default-export -- deprecated usage
-export default _.compose(
-  // Ensures there's data for the `collectionsMap` prop
-  Collections.loadList({ loadingAndErrorWrapper: false }),
-  connect(mapStateToProps),
-)(FormAuthorityLevelFieldContainer);
-- 
GitLab