+
{member.mfa_enabled ? (
-
+ <>
+ Enabled
+
+ >
) : (
-
+ <>
+ Disabled
+
+ >
)}
@@ -130,18 +134,18 @@ export const MemberRow = ({ member }: MemberRowProps) => {
return (
-
{roleName}
+
{roleName}
{hasProjectScopedRoles && (
<>
-
•
+
{projectsApplied.length === 1 ? (
-
+
{projectsApplied[0]}
) : (
-
+
{role?.projects.length === 0
? 'Organization'
: `${projectsApplied.length} project${projectsApplied.length > 1 ? 's' : ''}`}
diff --git a/apps/studio/components/interfaces/Organization/TeamSettings/MembersView.tsx b/apps/studio/components/interfaces/Organization/TeamSettings/MembersView.tsx
index 97042788b4c0c..3ccf0d018b0dd 100644
--- a/apps/studio/components/interfaces/Organization/TeamSettings/MembersView.tsx
+++ b/apps/studio/components/interfaces/Organization/TeamSettings/MembersView.tsx
@@ -15,6 +15,7 @@ import {
Table,
TableBody,
TableCell,
+ TableFooter,
TableHead,
TableHeader,
TableRow,
@@ -62,6 +63,7 @@ const MembersView = ({ searchString }: MembersViewProps) => {
member.username.includes(searchString) || member.primary_email?.includes(searchString)
)
}
+ return false
})
}, [members, searchString])
@@ -102,30 +104,9 @@ const MembersView = ({ searchString }: MembersViewProps) => {
- User
-
-
- Enabled MFA
-
-
- Role
-
-
-
-
-
- How to configure access control?
-
-
-
+ Member
+ MFA
+ Role
@@ -138,9 +119,9 @@ const MembersView = ({ searchString }: MembersViewProps) => {
,
@@ -157,23 +138,24 @@ const MembersView = ({ searchString }: MembersViewProps) => {
- No users matched the search query "{searchString}"
+ No members matched the search query "{searchString}"
,
]
: []),
-
-
-
- {searchString ? `${filteredMembers.length} of ` : ''}
- {members.length || '0'} {members.length == 1 ? 'user' : 'users'}
-
-
- ,
]}
+
+
+
+ {searchString
+ ? `${filteredMembers.length} of ${members.length} ${members.length === 1 ? 'member' : 'members'}`
+ : `${members.length || 0} ${members.length === 1 ? 'member' : 'members'}`}
+
+
+
diff --git a/packages/ui/src/components/ExpandingTextArea/index.tsx b/packages/ui/src/components/ExpandingTextArea/index.tsx
index 03abc44338dcb..48b8755dd1ff2 100644
--- a/packages/ui/src/components/ExpandingTextArea/index.tsx
+++ b/packages/ui/src/components/ExpandingTextArea/index.tsx
@@ -1,6 +1,6 @@
'use client'
-import React, { forwardRef, useImperativeHandle, useRef } from 'react'
+import React, { forwardRef, useImperativeHandle, useLayoutEffect, useRef } from 'react'
import { cn } from '../../lib/utils'
import { TextArea } from '../shadcn/ui/text-area'
@@ -22,16 +22,17 @@ const ExpandingTextArea = forwardRef {
if (!element) return
- // Update the height
- if (!value) {
- element.style.height = 'auto'
- element.style.minHeight = '36px'
- } else {
- element.style.height = 'auto'
- element.style.height = element.scrollHeight + 'px'
- }
+ // Match single-line input height (h-10 = 40px) so we don't shrink when typing; grow only when content wraps
+ const singleLineHeightPx = 40
+ element.style.height = 'auto'
+ const contentHeight = element.scrollHeight
+ element.style.height = Math.max(singleLineHeightPx, contentHeight) + 'px'
}
+ useLayoutEffect(() => {
+ updateTextAreaHeight(internalRef.current)
+ }, [value])
+
return (
From f3b6993de7c3efc2dd01fd2abd219f821cd38403 Mon Sep 17 00:00:00 2001
From: Joshen Lim
Date: Thu, 26 Feb 2026 15:59:41 +0800
Subject: [PATCH 4/5] New home page, show service status as coming up if
service health is unhealthy + project status is coming up (#43117)
## Context
With the new home page, we have a stat to show the overall status of the
project + individual service health, both of which data is pulled from
an endpoint
At the time of project creation, some of the services start of as
UNHEALTHY, which results in the status stat here showing a label of
"Unhealthy" (while accurate in the sense that we're showing what's
coming from the API, its inaccurate as the services are still spinning
up)
## Changes involved
For each service, am opting to show their status as "COMING_UP" if the
service status is UNHEALTHY + the project's status is COMING_UP or
UNKNOWN. The overall status label should also show "Coming up" if the
project's status is COMING_UP or UNKNOWN as well
---
.../interfaces/HomeNew/ServiceStatus.tsx | 28 +++++++++++--------
1 file changed, 17 insertions(+), 11 deletions(-)
diff --git a/apps/studio/components/interfaces/HomeNew/ServiceStatus.tsx b/apps/studio/components/interfaces/HomeNew/ServiceStatus.tsx
index ba4d114d0c4b4..fbdf0c87c493f 100644
--- a/apps/studio/components/interfaces/HomeNew/ServiceStatus.tsx
+++ b/apps/studio/components/interfaces/HomeNew/ServiceStatus.tsx
@@ -1,22 +1,22 @@
-import dayjs from 'dayjs'
-import { ChevronRight, Loader2 } from 'lucide-react'
-import Link from 'next/link'
-
import { useParams } from 'common'
import { InlineLink } from 'components/ui/InlineLink'
import { SingleStat } from 'components/ui/SingleStat'
import { useBranchesQuery } from 'data/branches/branches-query'
import { useEdgeFunctionServiceStatusQuery } from 'data/service-status/edge-functions-status-query'
import { useProjectServiceStatusQuery } from 'data/service-status/service-status-query'
+import dayjs from 'dayjs'
import { useIsFeatureEnabled } from 'hooks/misc/useIsFeatureEnabled'
import { useSelectedProjectQuery } from 'hooks/misc/useSelectedProject'
import { DOCS_URL } from 'lib/constants'
-import { InfoIcon, PopoverContent_Shadcn_, PopoverTrigger_Shadcn_, Popover_Shadcn_, cn } from 'ui'
+import { ChevronRight, Loader2 } from 'lucide-react'
+import Link from 'next/link'
+import { cn, InfoIcon, Popover_Shadcn_, PopoverContent_Shadcn_, PopoverTrigger_Shadcn_ } from 'ui'
+
import {
+ extractDbSchema,
ProjectServiceStatus,
StatusIcon,
StatusMessage,
- extractDbSchema,
} from '../Home/ServiceStatus'
const SERVICE_STATUS_THRESHOLD = 5 // minutes
@@ -224,10 +224,11 @@ export const ServiceStatus = () => {
currentBranch?.status === 'RUNNING_MIGRATIONS' ||
isMigrationLoading))
+ const isProjectComingUp = ['COMING_UP', 'UNKNOWN'].includes(project?.status ?? '')
+
const anyUnhealthy = services.some((service) => service.status === 'UNHEALTHY')
- const anyComingUp = services.some((service) => service.status === 'COMING_UP')
- // Spinner only while the overall project is in COMING_UP; otherwise show 6-dot grid
- const showSpinnerIcon = project?.status === 'COMING_UP'
+ const anyComingUp =
+ isProjectComingUp || services.some((service) => service.status === 'COMING_UP')
const getOverallStatusLabel = (): string => {
if (isLoadingChecks) return 'Checking...'
@@ -243,7 +244,8 @@ export const ServiceStatus = () => {
) : (
@@ -288,7 +290,11 @@ export const ServiceStatus = () => {
From c159a2d964fbb241e3b16886fc830d4e54feb1ce Mon Sep 17 00:00:00 2001
From: Joshen Lim
Date: Thu, 26 Feb 2026 16:02:27 +0800
Subject: [PATCH 5/5] Tiny fix for notifications red dot (#43204)
## Context
Should've removed the `status` prop when fetching notifications in
`AdvisorButton` for a more accurate indication of
`hasCriticalNotifications` as we should show that dot for read critical
notifications too (not just new)
---
apps/studio/components/layouts/AppLayout/AdvisorButton.tsx | 1 -
1 file changed, 1 deletion(-)
diff --git a/apps/studio/components/layouts/AppLayout/AdvisorButton.tsx b/apps/studio/components/layouts/AppLayout/AdvisorButton.tsx
index fa763f76209ac..f2c49386fefc5 100644
--- a/apps/studio/components/layouts/AppLayout/AdvisorButton.tsx
+++ b/apps/studio/components/layouts/AppLayout/AdvisorButton.tsx
@@ -14,7 +14,6 @@ export const AdvisorButton = ({ projectRef }: { projectRef?: string }) => {
const { data: lints } = useProjectLintsQuery({ projectRef })
const { data: notificationsData } = useNotificationsV2Query({
- status: 'new',
filters: {},
limit: 20,
})