go.chromium.org/luci@v0.0.0-20240309015107-7cdc2e660f33/analysis/frontend/ui/src/hooks/use_fetch_project_config.ts (about)

     1  // Copyright 2022 The LUCI Authors.
     2  //
     3  // Licensed under the Apache License, Version 2.0 (the "License");
     4  // you may not use this file except in compliance with the License.
     5  // You may obtain a copy of the License at
     6  //
     7  //      http://www.apache.org/licenses/LICENSE-2.0
     8  //
     9  // Unless required by applicable law or agreed to in writing, software
    10  // distributed under the License is distributed on an "AS IS" BASIS,
    11  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    12  // See the License for the specific language governing permissions and
    13  // limitations under the License.
    14  
    15  import {
    16    useQuery,
    17    UseQueryResult,
    18  } from 'react-query';
    19  
    20  import { GetProjectConfigRequest, ProjectConfig } from '@/proto/go.chromium.org/luci/analysis/proto/v1/projects.pb';
    21  import { getProjectsService } from '@/services/services';
    22  import { prpcRetrier } from '@/tools/prpc_retrier';
    23  
    24  export const useFetchProjectConfig = (
    25      project: string,
    26  ): UseQueryResult<ProjectConfig, Error> => {
    27    const projectsService = getProjectsService();
    28    return useQuery(['projectconfig', project], async () => {
    29      if (!project) {
    30        throw new Error('invariant violated: project should be set');
    31      }
    32      const request: GetProjectConfigRequest = {
    33        name: `projects/${encodeURIComponent(project)}/config`,
    34      };
    35      return await projectsService.getConfig(request);
    36    }, {
    37      enabled: !!project,
    38      retry: prpcRetrier,
    39    });
    40  };