diff --git a/apps/studio/components/interfaces/Organization/TeamSettings/MemberActions.tsx b/apps/studio/components/interfaces/Organization/TeamSettings/MemberActions.tsx index 6dc091d898f..80dc5bfe9cd 100644 --- a/apps/studio/components/interfaces/Organization/TeamSettings/MemberActions.tsx +++ b/apps/studio/components/interfaces/Organization/TeamSettings/MemberActions.tsx @@ -134,7 +134,7 @@ export const MemberActions = ({ member }: MemberActionsProps) => { const projectScopedRole = projectScopedRoles.find((role) => role.id === roleId) - if (projectScopedRole !== undefined) { + if (projectScopedRole !== undefined && projectScopedRole.base_role_id) { const projects = projectScopedRole.projects.map(({ ref }) => ref) inviteMember({ slug, diff --git a/apps/studio/components/interfaces/Organization/TeamSettings/UpdateRolesPanel/UpdateRolesPanel.utils.ts b/apps/studio/components/interfaces/Organization/TeamSettings/UpdateRolesPanel/UpdateRolesPanel.utils.ts index 0cda4548fd8..53ab7d8dd89 100644 --- a/apps/studio/components/interfaces/Organization/TeamSettings/UpdateRolesPanel/UpdateRolesPanel.utils.ts +++ b/apps/studio/components/interfaces/Organization/TeamSettings/UpdateRolesPanel/UpdateRolesPanel.utils.ts @@ -143,14 +143,15 @@ export const deriveRoleChangeActions = ( return toRemove.push(role.id) } - const projectsToAddToRole = (groupByAddedRoles[role.base_role_id]?.map((r) => r.ref) ?? + const projectsToAddToRole = (groupByAddedRoles[role.base_role_id ?? '']?.map((r) => r.ref) ?? []) as string[] const projectsToRemoveFromRole = (groupByRemovedRoles[role.id]?.map((r) => r.ref) ?? []) as string[] const projectsUpdatingFromRole = (groupByUpdatingFromRoles[role.id]?.map((r) => r.ref) ?? []) as string[] - const projectsUpdatingToRole = (groupByUpdatingToRoles[role.base_role_id]?.map((r) => r.ref) ?? - []) as string[] + const projectsUpdatingToRole = (groupByUpdatingToRoles[role.base_role_id ?? '']?.map( + (r) => r.ref + ) ?? []) as string[] const projectRefsAppliedUpdated = projectRefsApplied .filter((x) => !projectsToRemoveFromRole.includes(x)) .filter((x) => !projectsUpdatingFromRole.includes(x)) diff --git a/apps/studio/components/interfaces/Realtime/Inspector/EmptyRealtime.tsx b/apps/studio/components/interfaces/Realtime/Inspector/EmptyRealtime.tsx index 743d6b9b493..aaf30701215 100644 --- a/apps/studio/components/interfaces/Realtime/Inspector/EmptyRealtime.tsx +++ b/apps/studio/components/interfaces/Realtime/Inspector/EmptyRealtime.tsx @@ -1,9 +1,11 @@ import Link from 'next/link' import { AiIconAnimation, Button, Card, cn } from 'ui' +import { SuspensionNotice } from '../../Settings/SuspensionNotice' import { AnimatedCursors } from './AnimatedCursors' import { SIDEBAR_KEYS } from '@/components/layouts/ProjectLayout/LayoutSidebar/LayoutSidebarProvider' import { DocsButton } from '@/components/ui/DocsButton' +import { useRealtimeConfigurationQuery } from '@/data/realtime/realtime-config-query' import { DOCS_URL } from '@/lib/constants' import { useAiAssistantStateSnapshot } from '@/state/ai-assistant-state' import { useSidebarManagerSnapshot } from '@/state/sidebar-manager-state' @@ -15,6 +17,9 @@ export const EmptyRealtime = ({ projectRef }: { projectRef: string }) => { const aiSnap = useAiAssistantStateSnapshot() const { openSidebar } = useSidebarManagerSnapshot() + const { data } = useRealtimeConfigurationQuery({ projectRef }) + const isSuspended = Boolean(data?.admin_suspended_at) + const handleCreateTriggerWithAssistant = () => { openSidebar(SIDEBAR_KEYS.AI_ASSISTANT) aiSnap.newChat({ @@ -26,17 +31,21 @@ export const EmptyRealtime = ({ projectRef }: { projectRef: string }) => { return (
Send your first realtime message from your database, application code or edge function
- } onClick={handleCreateTriggerWithAssistant}> - Set up realtime for me - + {!isSuspended && ( + } onClick={handleCreateTriggerWithAssistant}> + Set up realtime for me + + )}