]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-21692 fix react-queries to not do calls when it is not needed
authorViktor Vorona <viktor.vorona@sonarsource.com>
Wed, 21 Feb 2024 15:02:07 +0000 (16:02 +0100)
committersonartech <sonartech@sonarsource.com>
Thu, 22 Feb 2024 20:02:53 +0000 (20:02 +0000)
server/sonar-web/src/main/js/components/permissions/GroupHolder.tsx
server/sonar-web/src/main/js/components/permissions/UserHolder.tsx
server/sonar-web/src/main/js/queries/devops-integration.ts
server/sonar-web/src/main/js/queries/identity-provider/common.ts

index a94bcb0a149553f9429454c97bd84614fcefa5e9..f1a56da82f1ea7995c58cf4361cadf01f9b2dc31 100644 (file)
@@ -58,7 +58,9 @@ export default function GroupHolder(props: Props) {
     permissions,
     removeOnly,
   });
-  const { data: identityProvider } = useIdentityProviderQuery();
+  const { data: identityProvider } = useIdentityProviderQuery({
+    enabled: isGitHubProject ?? false,
+  });
 
   const description =
     group.name === ANYONE ? translate('user_groups.anyone.description') : group.description;
index 225ee2a054642423a4e9e9573135d62a4a61cb17..1f3bc7f1bce0db24f72a67bb9608932a12ff1339 100644 (file)
@@ -45,7 +45,9 @@ export default function UserHolder(props: Props) {
     permissions,
     removeOnly,
   });
-  const { data: identityProvider } = useIdentityProviderQuery();
+  const { data: identityProvider } = useIdentityProviderQuery({
+    enabled: isGitHubProject ?? false,
+  });
 
   const permissionCells = permissions.map((permission) => (
     <PermissionCell
index 4620641a5cc75ce84d23322dd3f3c78413ba639c..6713052e21d694df835072d16e673e1baece34dc 100644 (file)
@@ -33,6 +33,10 @@ import { AlmKeys, ProjectAlmBindingParams, ProjectAlmBindingResponse } from '../
 
 function useProjectKeyFromLocation() {
   const location = useLocation();
+  // Permissions Templates page uses id in query for template id, so to avoid conflict and unwanted fetching we don't search for project there
+  if (location.pathname.includes('permission_templates')) {
+    return null;
+  }
   const search = new URLSearchParams(location.search);
   const id = search.get('id');
   return id as string;
@@ -55,7 +59,7 @@ export function useProjectBindingQuery<T = ProjectAlmBindingResponse>(
   const projectKey = project ?? keyFromUrl;
 
   return useQuery({
-    queryKey: ['devops_integration', projectKey, 'binding'],
+    queryKey: ['devops_integration', projectKey ?? '_blank_', 'binding'],
     queryFn: ({ queryKey: [_, key] }) =>
       getProjectAlmBinding(key).catch((e: Response) => {
         if (e.status === HttpStatus.NotFound) {
@@ -65,6 +69,7 @@ export function useProjectBindingQuery<T = ProjectAlmBindingResponse>(
       }),
     staleTime: 60_000,
     retry: false,
+    enabled: projectKey !== null,
     ...options,
   });
 }
@@ -79,7 +84,13 @@ export function useDeleteProjectAlmBindingMutation(project?: string) {
   const keyFromUrl = useProjectKeyFromLocation();
   const client = useQueryClient();
   return useMutation({
-    mutationFn: () => deleteProjectAlmBinding(project ?? keyFromUrl),
+    mutationFn: () => {
+      const key = project ?? keyFromUrl;
+      if (key === null) {
+        throw new Error('No project key');
+      }
+      return deleteProjectAlmBinding(key);
+    },
     onSuccess: () => {
       client.invalidateQueries({
         queryKey: ['devops_integration', project ?? keyFromUrl, 'binding'],
index fd080b4e28136b14bd0deecefceccf0bf507a8e4..ef9c01c3e66d1b97754b26f0d7e24835dd52735e 100644 (file)
  * along with this program; if not, write to the Free Software Foundation,
  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
  */
-import { useQuery } from '@tanstack/react-query';
+import { UseQueryOptions, useQuery } from '@tanstack/react-query';
 import { getSystemInfo } from '../../api/system';
-import { SysInfoCluster } from '../../types/types';
+import { Provider, SysInfoCluster } from '../../types/types';
 
-export function useIdentityProviderQuery() {
+export function useIdentityProviderQuery<T = { provider: Provider }>(
+  options?: Omit<UseQueryOptions<{ provider: Provider }, Error, T>, 'queryKey' | 'queryFn'>,
+) {
   return useQuery({
     queryKey: ['identity_provider', 'users_and_groups_provider'],
     queryFn: async () => {
       const info = (await getSystemInfo()) as SysInfoCluster;
       return { provider: info.System['External Users and Groups Provisioning'] };
     },
+    ...options,
   });
 }