import { sortBy } from 'lodash' import { MultiSelector, MultiSelectorContent, MultiSelectorItem, MultiSelectorList, MultiSelectorTrigger, } from 'ui-patterns/multi-select' import { ShimmeringLoader } from 'ui-patterns/ShimmeringLoader' import { SYSTEM_ROLES } from '@/components/interfaces/Database/Roles/Roles.constants' import AlertError from '@/components/ui/AlertError' import { useDatabaseRolesQuery } from '@/data/database-roles/database-roles-query' import { useSelectedProjectQuery } from '@/hooks/misc/useSelectedProject' interface PolicyRolesProps { selectedRoles: string[] onUpdateSelectedRoles: (roles: string[]) => void } type SystemRole = (typeof SYSTEM_ROLES)[number] export const PolicyRoles = ({ selectedRoles, onUpdateSelectedRoles }: PolicyRolesProps) => { const { data: project } = useSelectedProjectQuery() const { data, error, isPending: isLoading, isError, isSuccess, } = useDatabaseRolesQuery({ projectRef: project?.ref, connectionString: project?.connectionString, }) const roles = sortBy( (data ?? []).filter((role) => !SYSTEM_ROLES.includes(role.name as SystemRole)), (r) => r.name.toLocaleLowerCase() ) const formattedRoles = roles.map((role) => { return { id: role.id, name: role.name, value: role.name, disabled: false, } }) return (
Apply policy to the selected roles