diff --git a/apps/studio/components/grid/components/editor/TextEditor.tsx b/apps/studio/components/grid/components/editor/TextEditor.tsx index 7496f78c727..14c111adea1 100644 --- a/apps/studio/components/grid/components/editor/TextEditor.tsx +++ b/apps/studio/components/grid/components/editor/TextEditor.tsx @@ -15,6 +15,7 @@ import { TooltipContent_Shadcn_, TooltipTrigger_Shadcn_, Tooltip_Shadcn_, + cn, } from 'ui' import { useTrackedState } from '../../store/Store' import { BlockKeys } from '../common/BlockKeys' @@ -188,9 +189,10 @@ export const TextEditor = ({ } >
setIsPopoverOpen(!isPopoverOpen)} > {value === null ? : value === '' ? : value} diff --git a/apps/studio/components/interfaces/Auth/Users/Users.utils.tsx b/apps/studio/components/interfaces/Auth/Users/Users.utils.tsx index 54ace3d0262..4bb4eaf5024 100644 --- a/apps/studio/components/interfaces/Auth/Users/Users.utils.tsx +++ b/apps/studio/components/interfaces/Auth/Users/Users.utils.tsx @@ -210,9 +210,12 @@ export function getAvatarUrl(user: User): string | undefined { profile_url || profileImageUrl || profileImageURL || - profile_image_url) as string | undefined + profile_image_url || + '') as string | undefined - return SUPPORTED_CSP_AVATAR_URLS.some((x) => (url ?? '').startsWith(x)) ? url : undefined + if (url === undefined) return undefined + const isSupported = SUPPORTED_CSP_AVATAR_URLS.some((x) => url.startsWith(x)) + return isSupported ? url : undefined } export const formatUserColumns = ({ diff --git a/apps/studio/components/interfaces/Home/SecurityStatus.tsx b/apps/studio/components/interfaces/Home/SecurityStatus.tsx index eeba9e89523..be4dc9b4425 100644 --- a/apps/studio/components/interfaces/Home/SecurityStatus.tsx +++ b/apps/studio/components/interfaces/Home/SecurityStatus.tsx @@ -1,6 +1,6 @@ import { CheckCircle2, ChevronRight, Loader2 } from 'lucide-react' import Link from 'next/link' -import { useState } from 'react' +import { Fragment, useState } from 'react' import { useParams } from 'common' import { useProjectLintsQuery } from 'data/lint/lint-query' @@ -81,12 +81,9 @@ export const SecurityStatus = () => { const { label, descriptionShort } = LINT_TABS.find((tab) => tab.id === level) ?? {} return ( lints.length > 0 && ( - <> + -
+
@@ -109,7 +106,7 @@ export const SecurityStatus = () => {
- + ) ) })} diff --git a/apps/studio/components/interfaces/Organization/Usage/UsageSection/DiskUsage.tsx b/apps/studio/components/interfaces/Organization/Usage/UsageSection/DiskUsage.tsx index 7c449363541..c682d1e1e53 100644 --- a/apps/studio/components/interfaces/Organization/Usage/UsageSection/DiskUsage.tsx +++ b/apps/studio/components/interfaces/Organization/Usage/UsageSection/DiskUsage.tsx @@ -169,7 +169,10 @@ const DiskUsage = ({ const totalDiskUsage = primaryDiskUsage + replicaDiskUsage return ( -
+
{project.name} diff --git a/apps/studio/components/interfaces/QueryPerformance/QueryPerformanceGrid.tsx b/apps/studio/components/interfaces/QueryPerformance/QueryPerformanceGrid.tsx index 8b69078bb51..06d0bd6eefe 100644 --- a/apps/studio/components/interfaces/QueryPerformance/QueryPerformanceGrid.tsx +++ b/apps/studio/components/interfaces/QueryPerformance/QueryPerformanceGrid.tsx @@ -154,6 +154,7 @@ export const QueryPerformanceGrid = ({ queryPerformanceQuery }: QueryPerformance return ( { if (typeof idx === 'number' && idx >= 0) { setSelectedRow(idx) diff --git a/apps/studio/components/to-be-cleaned/Storage/StorageExplorer/ColumnContextMenu.tsx b/apps/studio/components/to-be-cleaned/Storage/StorageExplorer/ColumnContextMenu.tsx index 8adbf34019c..3cfb338bee8 100644 --- a/apps/studio/components/to-be-cleaned/Storage/StorageExplorer/ColumnContextMenu.tsx +++ b/apps/studio/components/to-be-cleaned/Storage/StorageExplorer/ColumnContextMenu.tsx @@ -60,15 +60,13 @@ const ColumnContextMenu = ({ id = '' }: ColumnContextMenuProps) => { return ( - {canUpdateFiles && ( - <> - onSelectCreateFolder(props.index)}> - - New folder - - - - )} + {canUpdateFiles && [ + onSelectCreateFolder(props.index)}> + + New folder + , + , + ]} onSelectAllItemsInColumn(props.index)}> Select all items diff --git a/apps/studio/components/to-be-cleaned/Storage/StorageExplorer/FileExplorerHeader.tsx b/apps/studio/components/to-be-cleaned/Storage/StorageExplorer/FileExplorerHeader.tsx index 479fc46ca2b..5e31b0477ca 100644 --- a/apps/studio/components/to-be-cleaned/Storage/StorageExplorer/FileExplorerHeader.tsx +++ b/apps/studio/components/to-be-cleaned/Storage/StorageExplorer/FileExplorerHeader.tsx @@ -1,10 +1,10 @@ -import * as Tooltip from '@radix-ui/react-tooltip' import { PermissionAction } from '@supabase/shared-types/out/constants' import { compact, debounce, isEqual, noop } from 'lodash' import { useCallback, useEffect, useRef, useState } from 'react' import { useIsAPIDocsSidePanelEnabled } from 'components/interfaces/App/FeaturePreview/FeaturePreviewContext' import APIDocsButton from 'components/ui/APIDocsButton' +import { ButtonTooltip } from 'components/ui/ButtonTooltip' import { useCheckPermissions } from 'hooks/misc/useCheckPermissions' import { useStorageStore } from 'localStores/storageExplorer/StorageExplorerStore' import { @@ -426,64 +426,34 @@ const FileExplorerHeader = ({ {/* @ts-ignore */}
- - - - - {!canUpdateStorage && ( - - - -
- - You need additional permissions to upload files - -
-
-
- )} -
- - - - - {!canUpdateStorage && ( - - - -
- - You need additional permissions to create folders - -
-
-
- )} -
+ } + type="text" + disabled={!canUpdateStorage || breadcrumbs.length === 0} + onClick={onSelectUpload} + tooltip={{ + content: { + side: 'bottom', + text: 'You need additional permissions to upload files', + }, + }} + > + Upload files + + } + type="text" + disabled={!canUpdateStorage || breadcrumbs.length === 0} + onClick={() => addNewFolderPlaceholder(-1)} + tooltip={{ + content: { + side: 'bottom', + text: 'You need additional permissions to create folders', + }, + }} + > + Create folder +
diff --git a/apps/studio/data/database/retrieve-index-from-select-query.ts b/apps/studio/data/database/retrieve-index-from-select-query.ts index 06d80dddebc..8ef31cde994 100644 --- a/apps/studio/data/database/retrieve-index-from-select-query.ts +++ b/apps/studio/data/database/retrieve-index-from-select-query.ts @@ -112,6 +112,7 @@ export const useGetIndexesFromSelectQuery = { const { auth_id } = useParams() const [selectedOrgSlug, setSelectedOrgSlug] = useState() - const { data: organizations, isLoading: isLoadingOrganizations } = useOrganizationsQuery() + const { + data: organizations, + isSuccess: isSuccessOrganizations, + isLoading: isLoadingOrganizations, + } = useOrganizationsQuery() const { data: requester, isLoading, isError, error } = useApiAuthorizationQuery({ id: auth_id }) const isApproved = (requester?.approved_at ?? null) !== null const isExpired = dayjs().isAfter(dayjs(requester?.expires_at)) @@ -43,10 +47,11 @@ const APIAuthorizationPage: NextPageWithLayout = () => { const isSubmitting = isApproving || isDeclining useEffect(() => { - if (!isLoadingOrganizations) { - setSelectedOrgSlug(organizations?.[0]?.slug ?? undefined) + if (isSuccessOrganizations && organizations.length > 0) { + setSelectedOrgSlug(organizations[0].slug) } - }, [isLoadingOrganizations]) + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [isSuccessOrganizations]) const onApproveRequest = async () => { if (!auth_id) { diff --git a/packages/ui-patterns/info-tooltip.tsx b/packages/ui-patterns/info-tooltip.tsx index ae2f2004fdf..e3de1744883 100644 --- a/packages/ui-patterns/info-tooltip.tsx +++ b/packages/ui-patterns/info-tooltip.tsx @@ -10,9 +10,9 @@ const SVG = forwardRef>((props, ref {...props} > ))