import {Trash2} from 'lucide-react' import {useMutation, useQueryClient, type UseQueryResult} from '@tanstack/react-query' import {useState} from 'react' import {createUserPoolGroup, deleteUserPoolGroup} from '@/api/cloudProxyClient' import type {UserPoolGroup} from '@/types/resource' type Props = { poolId: string groupsQuery: UseQueryResult groupsKey: unknown[] runtimeReachable: boolean } export function CognitoGroupsSection({poolId, groupsQuery, groupsKey, runtimeReachable}: Props) { const queryClient = useQueryClient() const [name, setName] = useState('') const [description, setDescription] = useState('') const [precedence, setPrecedence] = useState('') const refresh = () => queryClient.invalidateQueries({queryKey: groupsKey}) const createMutation = useMutation({ mutationFn: () => createUserPoolGroup('aws', poolId, { name: name.trim(), ...(description.trim() ? {description: description.trim()} : {}), ...(precedence.trim() ? {precedence: Number(precedence)} : {}), }), onSuccess: () => { setName('') setDescription('') setPrecedence('') return refresh() }, }) const deleteMutation = useMutation({ mutationFn: (groupName: string) => deleteUserPoolGroup('aws', poolId, groupName), onSuccess: refresh, }) const groups = groupsQuery.data ?? [] const pending = createMutation.isPending || deleteMutation.isPending const error = groupsQuery.error ?? createMutation.error ?? deleteMutation.error return <>

Groups

Group names appear in the cognito:groups token claim, so apps can check roles
{ event.preventDefault(); if (name.trim()) createMutation.mutate() }}>
{error instanceof Error &&

{error.message}

} {groupsQuery.isSuccess && groups.length === 0 &&

No groups yet.

} {groups.length > 0 &&
{groups.map((group) => ( ))}
NameDescriptionPrecedence
{group.name} {group.description || '—'} {group.precedence ?? '—'}
} }