Ctrl K
ComunidadGuías…

src/features/account/queries.ts

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
import type { PaginationQuery } from '@shared/api/pagination'
import { keepPreviousData, useQuery, useQueryClient } from '@tanstack/react-query'
import { toast } from 'sonner'
import { accountQueryKeys, accountQueryOptions } from '@/lib/account-query'
import { getConfigz } from '@/lib/api'
import {
  getAccountOrganization,
  getAccountProfile,
  getAccountSecurity,
  getDeveloperConsoleAccess,
  listAccountAgents,
  listAccountApplicationAuthorizations,
  listAccountConnections,
  listAccountOrganizationInvitations,
  listAccountOrganizationRoles,
  listAccountOrganizations,
  listAccountOrganizationTeamMembers,
  listAccountOrganizationTeams,
  listAccountProviderConnections,
  listAccountProviderConnectors,
  listAccountSessions,
  listAgentResourceRequests,
  listExternalApiResources,
  listLinkedAccounts,
  listPasskeys,
} from '@/lib/api/account'
import { tt } from '@/lib/i18n'

export { accountQueryKeys } from '@/lib/account-query'

export function useAccountConfig() {
  return useQuery({
    queryKey: accountQueryKeys.configz,
    queryFn: getConfigz,
    ...accountQueryOptions,
  })
}

export function useAccountProfile() {
  return useQuery({
    queryKey: accountQueryKeys.profile,
    queryFn: getAccountProfile,
    ...accountQueryOptions,
  })
}

export function useDeveloperConsoleAccess() {
  return useQuery({
    queryKey: accountQueryKeys.developerConsoleAccess,
    queryFn: getDeveloperConsoleAccess,
    ...accountQueryOptions,
  })
}

export function useAccountOrganizations() {
  return useQuery({
    queryKey: accountQueryKeys.organizations,
    queryFn: listAccountOrganizations,
    ...accountQueryOptions,
  })
}

export function useAccountOrganizationInvitations() {
  return useQuery({
    queryKey: accountQueryKeys.organizationInvitations,
    queryFn: listAccountOrganizationInvitations,
    ...accountQueryOptions,
  })
}

export function useAccountOrganization(organizationId: string) {
  return useQuery({
    queryKey: [...accountQueryKeys.organizations, organizationId],
    queryFn: () => getAccountOrganization(organizationId),
    ...accountQueryOptions,
  })
}

export function useAccountOrganizationRoles(organizationId: string, enabled = true) {
  return useQuery({
    queryKey: accountQueryKeys.organizationRoles(organizationId),
    queryFn: () => listAccountOrganizationRoles(organizationId),
    enabled,
    ...accountQueryOptions,
  })
}

export function useAccountOrganizationTeams(organizationId: string, enabled = true) {
  return useQuery({
    queryKey: accountQueryKeys.organizationTeams(organizationId),
    queryFn: () => listAccountOrganizationTeams(organizationId),
    enabled,
    ...accountQueryOptions,
  })
}

export function useAccountOrganizationTeamMembers(
  organizationId: string,
  teamId: string | null,
  pagination: PaginationQuery = { page: 1, pageSize: 20 },
) {
  return useQuery({
    queryKey: [...accountQueryKeys.organizationTeamMembers(teamId ?? 'none'), pagination],
    queryFn: () => listAccountOrganizationTeamMembers(organizationId, teamId!, pagination),
    enabled: Boolean(teamId),
    placeholderData: keepPreviousData,
    ...accountQueryOptions,
  })
}

export function useAccountSecurity(enabled = true) {
  return useQuery({
    enabled,
    queryKey: accountQueryKeys.security,
    queryFn: getAccountSecurity,
    ...accountQueryOptions,
  })
}

export function useAccountPasskeys(enabled = true) {
  return useQuery({
    enabled,
    queryKey: accountQueryKeys.passkeys,
    queryFn: listPasskeys,
    ...accountQueryOptions,
  })
}

export function useAccountSessions(enabled: boolean) {
  return useQuery({
    enabled,
    queryKey: accountQueryKeys.sessions,
    queryFn: listAccountSessions,
    ...accountQueryOptions,
  })
}

export function useLinkedAccounts(enabled: boolean) {
  return useQuery({
    enabled,
    queryKey: accountQueryKeys.linkedAccounts,
    queryFn: listLinkedAccounts,
    ...accountQueryOptions,
  })
}

export function useAccountProviderConnectors() {
  return useQuery({
    queryKey: accountQueryKeys.providerConnectors,
    queryFn: listAccountProviderConnectors,
    ...accountQueryOptions,
  })
}

export function useAccountProviderConnections(enabled = true) {
  return useQuery({
    enabled,
    queryKey: accountQueryKeys.providerConnections,
    queryFn: listAccountProviderConnections,
    ...accountQueryOptions,
  })
}

export function useAccountApplicationAuthorizations(enabled: boolean) {
  return useQuery({
    enabled,
    queryKey: accountQueryKeys.applications,
    queryFn: listAccountApplicationAuthorizations,
    ...accountQueryOptions,
  })
}

export function useAccountAgents() {
  return useQuery({
    queryKey: accountQueryKeys.agents,
    queryFn: listAccountAgents,
    ...accountQueryOptions,
  })
}

export function useExternalApiResources() {
  return useQuery({
    queryKey: accountQueryKeys.externalApiResources,
    queryFn: listExternalApiResources,
    ...accountQueryOptions,
  })
}

export function useAccountConnections() {
  return useQuery({
    queryKey: accountQueryKeys.accountConnections,
    queryFn: listAccountConnections,
    ...accountQueryOptions,
  })
}

export function useAccountAccessRequests() {
  return useQuery({
    queryKey: accountQueryKeys.accessRequests,
    queryFn: listAgentResourceRequests,
    ...accountQueryOptions,
  })
}

export function useAccountMutation() {
  const queryClient = useQueryClient()
  return async function mutate<T>(
    label: string,
    operation: () => Promise<T>,
    options: {
      invalidate?: readonly (readonly unknown[])[]
      invalidateExact?: readonly (readonly unknown[])[]
      onError?: (message: string) => void
    } = {},
  ) {
    try {
      const result = await operation()
      toast.success(tt(label))
      for (const queryKey of options.invalidate ?? []) {
        await queryClient.invalidateQueries({ queryKey })
      }
      for (const queryKey of options.invalidateExact ?? []) {
        await queryClient.invalidateQueries({ exact: true, queryKey })
      }
      return result
    } catch (mutationError) {
      const message = mutationError instanceof Error ? tt(mutationError.message) : tt('Account update failed.')
      options.onError?.(message)
      toast.error(message)
      return undefined
    }
  }
}