mirror of
				https://github.com/langgenius/dify.git
				synced 2025-11-04 12:53:38 +00:00 
			
		
		
		
	Signed-off-by: -LAN- <laipz8200@outlook.com> Co-authored-by: Hash Brown <hi@xzd.me> Co-authored-by: crazywoola <427733928@qq.com> Co-authored-by: GareArc <chen4851@purdue.edu> Co-authored-by: Byron.wang <byron@dify.ai> Co-authored-by: Joel <iamjoel007@gmail.com> Co-authored-by: -LAN- <laipz8200@outlook.com> Co-authored-by: Garfield Dai <dai.hai@foxmail.com> Co-authored-by: KVOJJJin <jzongcode@gmail.com> Co-authored-by: Alexi.F <654973939@qq.com> Co-authored-by: Xiyuan Chen <52963600+GareArc@users.noreply.github.com> Co-authored-by: kautsar_masuara <61046989+izon-masuara@users.noreply.github.com> Co-authored-by: achmad-kautsar <achmad.kautsar@insignia.co.id> Co-authored-by: Xin Zhang <sjhpzx@gmail.com> Co-authored-by: kelvintsim <83445753+kelvintsim@users.noreply.github.com> Co-authored-by: zxhlyh <jasonapring2015@outlook.com> Co-authored-by: Zixuan Cheng <61724187+Theysua@users.noreply.github.com>
		
			
				
	
	
		
			91 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			91 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
import { useInfiniteQuery, useMutation, useQuery, useQueryClient } from '@tanstack/react-query'
 | 
						|
import { get, post } from './base'
 | 
						|
import { getAppAccessMode, getUserCanAccess } from './share'
 | 
						|
import type { AccessControlAccount, AccessControlGroup, AccessMode, Subject } from '@/models/access-control'
 | 
						|
import type { App } from '@/types/app'
 | 
						|
 | 
						|
const NAME_SPACE = 'access-control'
 | 
						|
 | 
						|
export const useAppWhiteListSubjects = (appId: string | undefined, enabled: boolean) => {
 | 
						|
  return useQuery({
 | 
						|
    queryKey: [NAME_SPACE, 'app-whitelist-subjects', appId],
 | 
						|
    queryFn: () => get<{ groups: AccessControlGroup[]; members: AccessControlAccount[] }>(`/enterprise/webapp/app/subjects?appId=${appId}`),
 | 
						|
    enabled: !!appId && enabled,
 | 
						|
    staleTime: 0,
 | 
						|
    gcTime: 0,
 | 
						|
  })
 | 
						|
}
 | 
						|
 | 
						|
type SearchResults = {
 | 
						|
  currPage: number
 | 
						|
  totalPages: number
 | 
						|
  subjects: Subject[]
 | 
						|
  hasMore: boolean
 | 
						|
}
 | 
						|
 | 
						|
export const useSearchForWhiteListCandidates = (query: { keyword?: string; groupId?: AccessControlGroup['id']; resultsPerPage?: number }, enabled: boolean) => {
 | 
						|
  return useInfiniteQuery({
 | 
						|
    queryKey: [NAME_SPACE, 'app-whitelist-candidates', query],
 | 
						|
    queryFn: ({ pageParam }) => {
 | 
						|
      const params = new URLSearchParams()
 | 
						|
      Object.keys(query).forEach((key) => {
 | 
						|
        const typedKey = key as keyof typeof query
 | 
						|
        if (query[typedKey])
 | 
						|
          params.append(key, `${query[typedKey]}`)
 | 
						|
      })
 | 
						|
      params.append('pageNumber', `${pageParam}`)
 | 
						|
      return get<SearchResults>(`/enterprise/webapp/app/subject/search?${new URLSearchParams(params).toString()}`)
 | 
						|
    },
 | 
						|
    initialPageParam: 1,
 | 
						|
    getNextPageParam: (lastPage) => {
 | 
						|
      if (lastPage.hasMore)
 | 
						|
        return lastPage.currPage + 1
 | 
						|
      return undefined
 | 
						|
    },
 | 
						|
    gcTime: 0,
 | 
						|
    staleTime: 0,
 | 
						|
    enabled,
 | 
						|
  })
 | 
						|
}
 | 
						|
 | 
						|
type UpdateAccessModeParams = {
 | 
						|
  appId: App['id']
 | 
						|
  subjects?: Pick<Subject, 'subjectId' | 'subjectType'>[]
 | 
						|
  accessMode: AccessMode
 | 
						|
}
 | 
						|
 | 
						|
export const useUpdateAccessMode = () => {
 | 
						|
  const queryClient = useQueryClient()
 | 
						|
  return useMutation({
 | 
						|
    mutationKey: [NAME_SPACE, 'update-access-mode'],
 | 
						|
    mutationFn: (params: UpdateAccessModeParams) => {
 | 
						|
      return post('/enterprise/webapp/app/access-mode', { body: params })
 | 
						|
    },
 | 
						|
    onSuccess: () => {
 | 
						|
      queryClient.invalidateQueries({
 | 
						|
        queryKey: [NAME_SPACE, 'app-whitelist-subjects'],
 | 
						|
      })
 | 
						|
    },
 | 
						|
  })
 | 
						|
}
 | 
						|
 | 
						|
export const useGetAppAccessMode = ({ appId, isInstalledApp = true, enabled }: { appId?: string; isInstalledApp?: boolean; enabled: boolean }) => {
 | 
						|
  return useQuery({
 | 
						|
    queryKey: [NAME_SPACE, 'app-access-mode', appId],
 | 
						|
    queryFn: () => getAppAccessMode(appId!, isInstalledApp),
 | 
						|
    enabled: !!appId && enabled,
 | 
						|
    staleTime: 0,
 | 
						|
    gcTime: 0,
 | 
						|
  })
 | 
						|
}
 | 
						|
 | 
						|
export const useGetUserCanAccessApp = ({ appId, isInstalledApp = true, enabled }: { appId?: string; isInstalledApp?: boolean; enabled: boolean }) => {
 | 
						|
  return useQuery({
 | 
						|
    queryKey: [NAME_SPACE, 'user-can-access-app', appId],
 | 
						|
    queryFn: () => getUserCanAccess(appId!, isInstalledApp),
 | 
						|
    enabled: !!appId && enabled,
 | 
						|
    staleTime: 0,
 | 
						|
    gcTime: 0,
 | 
						|
  })
 | 
						|
}
 |