11import { useCallback } from 'react' ;
2+ import { queryOptions , skipToken , useQueryClient } from '@tanstack/react-query' ;
23import type { Query } from 'history' ;
34import chunk from 'lodash/chunk' ;
45import debounce from 'lodash/debounce' ;
@@ -14,9 +15,7 @@ import {ProjectsStatsStore} from 'sentry/stores/projectsStatsStore';
1415import { ProjectsStore } from 'sentry/stores/projectsStore' ;
1516import type { Team } from 'sentry/types/organization' ;
1617import type { Project } from 'sentry/types/project' ;
17- import { getApiUrl } from 'sentry/utils/api/getApiUrl' ;
18- import type { ApiQueryKey } from 'sentry/utils/queryClient' ;
19- import { setApiQueryData , useApiQuery , useQueryClient } from 'sentry/utils/queryClient' ;
18+ import { apiOptions } from 'sentry/utils/api/apiOptions' ;
2019import { useApi } from 'sentry/utils/useApi' ;
2120
2221type UpdateParams = {
@@ -284,27 +283,7 @@ export function fetchProjectsCount(api: Client, orgSlug: string) {
284283 return api . requestPromise ( `/organizations/${ orgSlug } /projects-count/` ) ;
285284}
286285
287- function makeProjectTeamsQueryKey ( {
288- orgSlug,
289- projectSlug,
290- cursor,
291- } : {
292- orgSlug : string ;
293- projectSlug : string ;
294- cursor ?: string ;
295- } ) : ApiQueryKey {
296- return [
297- getApiUrl ( '/projects/$organizationIdOrSlug/$projectIdOrSlug/teams/' , {
298- path : {
299- organizationIdOrSlug : orgSlug ,
300- projectIdOrSlug : projectSlug ,
301- } ,
302- } ) ,
303- { query : { cursor} } ,
304- ] ;
305- }
306-
307- export function useFetchProjectTeams ( {
286+ export function projectTeamsApiOptions ( {
308287 orgSlug,
309288 projectSlug,
310289 cursor,
@@ -313,10 +292,19 @@ export function useFetchProjectTeams({
313292 projectSlug : string ;
314293 cursor ?: string ;
315294} ) {
316- return useApiQuery < Team [ ] > ( makeProjectTeamsQueryKey ( { orgSlug, projectSlug, cursor} ) , {
317- staleTime : 0 ,
295+ return queryOptions ( {
296+ ...apiOptions . as < Team [ ] > ( ) (
297+ '/projects/$organizationIdOrSlug/$projectIdOrSlug/teams/' ,
298+ {
299+ path :
300+ orgSlug && projectSlug
301+ ? { organizationIdOrSlug : orgSlug , projectIdOrSlug : projectSlug }
302+ : skipToken ,
303+ query : { cursor} ,
304+ staleTime : 0 ,
305+ }
306+ ) ,
318307 retry : false ,
319- enabled : Boolean ( orgSlug && projectSlug ) ,
320308 } ) ;
321309}
322310
@@ -331,18 +319,17 @@ export function useAddTeamToProject({
331319} ) {
332320 const api = useApi ( ) ;
333321 const queryClient = useQueryClient ( ) ;
322+ const { queryKey} = projectTeamsApiOptions ( { orgSlug, projectSlug, cursor} ) ;
334323
335324 return useCallback (
336325 async ( team : Team ) => {
337326 await addTeamToProject ( api , orgSlug , projectSlug , team ) ;
338327
339- setApiQueryData < Team [ ] > (
340- queryClient ,
341- makeProjectTeamsQueryKey ( { orgSlug, projectSlug, cursor} ) ,
342- prevData => ( Array . isArray ( prevData ) ? [ team , ...prevData ] : [ team ] )
328+ queryClient . setQueryData ( queryKey , prevData =>
329+ prevData ? { ...prevData , json : [ team , ...prevData . json ] } : prevData
343330 ) ;
344331 } ,
345- [ api , orgSlug , projectSlug , cursor , queryClient ]
332+ [ api , orgSlug , projectSlug , queryKey , queryClient ]
346333 ) ;
347334}
348335
@@ -357,18 +344,18 @@ export function useRemoveTeamFromProject({
357344} ) {
358345 const api = useApi ( ) ;
359346 const queryClient = useQueryClient ( ) ;
347+ const { queryKey} = projectTeamsApiOptions ( { orgSlug, projectSlug, cursor} ) ;
360348
361349 return useCallback (
362350 async ( teamSlug : string ) => {
363351 await removeTeamFromProject ( api , orgSlug , projectSlug , teamSlug ) ;
364352
365- setApiQueryData < Team [ ] > (
366- queryClient ,
367- makeProjectTeamsQueryKey ( { orgSlug, projectSlug, cursor} ) ,
368- prevData =>
369- Array . isArray ( prevData ) ? prevData . filter ( team => team ?. slug !== teamSlug ) : [ ]
353+ queryClient . setQueryData ( queryKey , prevData =>
354+ prevData
355+ ? { ...prevData , json : prevData . json . filter ( team => team ?. slug !== teamSlug ) }
356+ : prevData
370357 ) ;
371358 } ,
372- [ api , orgSlug , projectSlug , cursor , queryClient ]
359+ [ api , orgSlug , projectSlug , queryKey , queryClient ]
373360 ) ;
374361}
0 commit comments