diff --git a/apps/docs/components/AuthProviders.tsx b/apps/docs/components/AuthProviders.tsx index 3c901f50ac..ec9b59a1e3 100644 --- a/apps/docs/components/AuthProviders.tsx +++ b/apps/docs/components/AuthProviders.tsx @@ -9,10 +9,13 @@ export default function AuthProviders({ type }: { type: string }) { <>
{description}
-{description}
+- {extension.comment.charAt(0).toUpperCase() + extension.comment.slice(1)} -
-+ {extension.comment.charAt(0).toUpperCase() + extension.comment.slice(1)} +
+{description}
- > - ) : ( -{title}
-{description}
+ > + ) : ( +{title}
+{text}
- - - {ctaLabel} - + + {ctaLabel} ))} @@ -40,14 +43,14 @@ const Footer = () => (Select which edge function to trigger
{errors.http_url &&{errors.http_url}
}diff --git a/studio/components/interfaces/Database/Publications/PublicationsList.tsx b/studio/components/interfaces/Database/Publications/PublicationsList.tsx index fa2b16dafc..36c9004a00 100644 --- a/studio/components/interfaces/Database/Publications/PublicationsList.tsx +++ b/studio/components/interfaces/Database/Publications/PublicationsList.tsx @@ -2,13 +2,18 @@ import { PermissionAction } from '@supabase/shared-types/out/constants' import { noop } from 'lodash' import { observer } from 'mobx-react-lite' import { useState } from 'react' -import { Button, IconAlertCircle, IconSearch, Input, Toggle } from 'ui' -import { confirmAlert } from 'components/to-be-cleaned/ModalsDeprecated/ConfirmModal' import Table from 'components/to-be-cleaned/Table' +import ConfirmationModal from 'components/ui/ConfirmationModal' import InformationBox from 'components/ui/InformationBox' import NoSearchResults from 'components/ui/NoSearchResults' import { useCheckPermissions, useStore } from 'hooks' +import { Button, IconAlertCircle, IconSearch, Input, Modal, Toggle } from 'ui' + +interface PublicationEvent { + event: string + key: string +} interface PublicationsListProps { onSelectPublication: (id: number) => void @@ -23,7 +28,7 @@ const PublicationsList = ({ onSelectPublication = noop }: PublicationsListProps) 'publications' ) - const publicationEvents = [ + const publicationEvents: PublicationEvent[] = [ { event: 'Insert', key: 'publish_insert' }, { event: 'Update', key: 'publish_update' }, { event: 'Delete', key: 'publish_delete' }, @@ -34,30 +39,34 @@ const PublicationsList = ({ onSelectPublication = noop }: PublicationsListProps) ? meta.publications.list() : meta.publications.list((publication: any) => publication.name.includes(filterString)) - const toggleListenEvent = async (publication: any, event: any, currentStatus: any) => { - const startStop = currentStatus ? 'stop' : 'start' - confirmAlert({ - title: 'Confirm', - message: `Are you sure you want to ${startStop} sending ${event} events for ${publication.name}?`, - onAsyncConfirm: async () => { - try { - let payload: any = { id: publication.id } - payload[`publish_${event}`] = !currentStatus - const { data, error }: any = await meta.publications.update(publication.id, payload) - if (error) { - throw error - } else { - return data - } - } catch (error: any) { - ui.setNotification({ - category: 'error', - message: `Failed to toggle for ${publication.name}: ${error.message}`, - }) - return false - } - }, - }) + const [toggleListenEventValue, setToggleListenEventValue] = useState<{ + publication: any + event: PublicationEvent + currentStatus: any + } | null>(null) + + const toggleListenEvent = async () => { + if (!toggleListenEventValue) return + + const { publication, event, currentStatus } = toggleListenEventValue + + try { + let payload: any = { id: publication.id } + payload[`publish_${event.event.toLowerCase()}`] = !currentStatus + const { data, error }: any = await meta.publications.update(publication.id, payload) + if (error) { + throw error + } else { + setToggleListenEventValue(null) + return data + } + } catch (error: any) { + ui.setNotification({ + category: 'error', + message: `Failed to toggle for ${publication.name}: ${error.message}`, + }) + return false + } } return ( @@ -101,7 +110,7 @@ const PublicationsList = ({ onSelectPublication = noop }: PublicationsListProps) Source , ]} - body={publications.map((x: any, i: number) => ( + body={publications.map((x, i) => (
+ Are you sure you want to {toggleListenEventValue?.currentStatus ? 'stop' : 'start'}{' '} + sending {toggleListenEventValue?.event.event.toLowerCase()} events for{' '} + {toggleListenEventValue?.publication.name}? +
+Back
-Back
+Back
-Back
+{metadata.label}:
- - Encrypted in Vault -{wrapper.label}
-{wrapper.label}
+ +
We have provided you a Client Key to get started. You will soon be able to add as many
keys as you like. You can find the anon key in the{' '}
-
- API Settings
- {' '}
+ API Settings{' '}
page.
We have provided you with a Service Key to get started. Soon you will be able to add as
many keys as you like. You can find the service_role in the{' '}
-
- API Settings
- {' '}
+ API Settings{' '}
page.
{description}
-{description}
+Interact with your database through the{' '} - - Supabase client libraries + + Supabase client libraries {' '} with your API keys.
@@ -263,18 +271,23 @@ const NewProjectPanel = () => {Get started by creating a new project.
Date
{dayjs.unix(currentPeriodEnd).utc().format('MMM D, YYYY')}
> diff --git a/studio/components/interfaces/Organization/BillingSettingsV2/BillingBreakdown/BillingMetric.tsx b/studio/components/interfaces/Organization/BillingSettingsV2/BillingBreakdown/BillingMetric.tsx index 0d9a579e65..77040638aa 100644 --- a/studio/components/interfaces/Organization/BillingSettingsV2/BillingBreakdown/BillingMetric.tsx +++ b/studio/components/interfaces/Organization/BillingSettingsV2/BillingBreakdown/BillingMetric.tsx @@ -55,18 +55,16 @@ const BillingMetric = ({ idx, slug, metric, usage, subscription }: BillingMetric >- {metric.name} -
-+ {metric.name} +
+More information
Spend cap
-Spend cap
+You can control whether your organization is charged for additional usage beyond the{' '} - - - included quota - + + included quota {' '} of your subscription plan. If you need to go beyond the included quota, simply switch off your spend cap to pay for additional usage. diff --git a/studio/components/interfaces/Organization/BillingSettingsV2/CostControl/SpendCapSidePanel.tsx b/studio/components/interfaces/Organization/BillingSettingsV2/CostControl/SpendCapSidePanel.tsx index c42e0d7f45..02787deaba 100644 --- a/studio/components/interfaces/Organization/BillingSettingsV2/CostControl/SpendCapSidePanel.tsx +++ b/studio/components/interfaces/Organization/BillingSettingsV2/CostControl/SpendCapSidePanel.tsx @@ -128,13 +128,15 @@ const SpendCapSidePanel = () => { header={
} tooltip={!canUpdateSpendCap ? 'You do not have permission to update spend cap' : undefined} diff --git a/studio/components/interfaces/Organization/BillingSettingsV2/PaymentMethods/PaymentMethods.tsx b/studio/components/interfaces/Organization/BillingSettingsV2/PaymentMethods/PaymentMethods.tsx index 4106917e4b..633a3f5958 100644 --- a/studio/components/interfaces/Organization/BillingSettingsV2/PaymentMethods/PaymentMethods.tsx +++ b/studio/components/interfaces/Organization/BillingSettingsV2/PaymentMethods/PaymentMethods.tsx @@ -99,14 +99,16 @@ const PaymentMethods = () => { variant="info" title="Payment is currently by invoice" actions={[ - - -More information
Pricing
-Pricing
+For more information about how we use personal information, please see our{' '} - - - privacy policy - + + privacy policy .
diff --git a/studio/components/interfaces/Organization/GeneralSettings/MigrateOrganizationBillingButton.tsx b/studio/components/interfaces/Organization/GeneralSettings/MigrateOrganizationBillingButton.tsx index 9e1589af68..c9a4bddd01 100644 --- a/studio/components/interfaces/Organization/GeneralSettings/MigrateOrganizationBillingButton.tsx +++ b/studio/components/interfaces/Organization/GeneralSettings/MigrateOrganizationBillingButton.tsx @@ -211,16 +211,22 @@ const MigrateOrganizationBillingButton = observer(() => {With organization-based billing, you'll have a single subscription for your entire organization. For a detailed breakdown of changes, see{' '} - - - Billing Migration Docs - + + Billing Migration Docs . To transfer projects to a different organization, visit{' '} - - - general project settings - + + general project settings .
@@ -267,10 +273,13 @@ const MigrateOrganizationBillingButton = observer(() => {Paid plans come with one compute instance included. Additional projects will at least cost the compute instance hours used (min $10/month). See{' '} - - - Compute Instance Usage Billing - + + Compute Instance Usage Billing {' '} for more details.
diff --git a/studio/components/interfaces/Organization/GeneralSettings/OrganizationBillingMigrationPanel.tsx b/studio/components/interfaces/Organization/GeneralSettings/OrganizationBillingMigrationPanel.tsx index d6b4cb33e4..5c6953a564 100644 --- a/studio/components/interfaces/Organization/GeneralSettings/OrganizationBillingMigrationPanel.tsx +++ b/studio/components/interfaces/Organization/GeneralSettings/OrganizationBillingMigrationPanel.tsx @@ -27,13 +27,15 @@ const OrganizationBillingMigrationPanel = observer(() => {{accessDescription}
Cancel invitation
-Revoke this invitation.
-Resend invitation
-Invites expire after 24hrs.
+Cancel invitation
+Revoke this invitation.
Remove member
-Resend invitation
+Invites expire after 24hrs.
+Remove member
++ This is permanent! Are you sure you want to remove {member.primary_email} +
++ Are you sure you want to leave this organization? This is permanent. +
+{link.name}
-{link.name}
+{column.format}
Head over to our docs site for the full API documentation.
- -
- {x}
-
- ))
- ) : (
- {result.error.error}
- )} -SQL query ran into an upstream timeout
++ You can either{' '} + + optimize your query + + , or{' '} + + increase the statement timeout + + . +
+
+ {x}
+
+ ))
+ ) : (
+ {result.error.error}
+ )} +- You can either{' '} - - optimize your query - - , or{' '} - - increase the statement timeout - - . -
- )}More information
About compute add-ons
-About compute add-ons
+Connection Pooler
-Connection Pooler
+- CPU -
-+ CPU +
+{computeInstance?.variant?.meta?.cpu_cores ?? 2}-core {cpuArchitecture}{' '} @@ -292,18 +295,16 @@ const Addons = () => {
- Max Disk Throughput -
-+ Max Disk Throughput +
+{computeInstance?.variant?.meta?.max_disk_io_mbs?.toLocaleString() ?? @@ -313,18 +314,16 @@ const Addons = () => {
- Baseline Disk Throughput -
-+ Baseline Disk Throughput +
+{computeInstance?.variant?.meta?.baseline_disk_io_mbs?.toLocaleString() ?? @@ -348,13 +347,15 @@ const Addons = () => {
More information
About PITR backups
-About PITR backups
+Reach out to us via support if you're interested
- -More information
About custom domains
-About custom domains
+Custom domains allow you to present a branded experience to your users. You may set up your custom domain in the{' '} - - General Settings + + General Settings {' '} page after enabling the add-on.
@@ -272,11 +274,11 @@ const CustomDomainSidePanel = () => { title="Custom domains are unavailable on the free plan" actions={ isOrgBilling ? ( - - -Failed to retrieve custom domain configuration. Please try again later or{' '} - - contact support + + contact support .
diff --git a/studio/components/interfaces/Settings/General/CustomDomainConfig/CustomDomainDelete.tsx b/studio/components/interfaces/Settings/General/CustomDomainConfig/CustomDomainDelete.tsx index cc141f9dd8..ae7938c996 100644 --- a/studio/components/interfaces/Settings/General/CustomDomainConfig/CustomDomainDelete.tsx +++ b/studio/components/interfaces/Settings/General/CustomDomainConfig/CustomDomainDelete.tsx @@ -50,13 +50,15 @@ const CustomDomainDelete = ({ projectRef, customDomain }: CustomDomainDeletePropYou may also visit{' '} - - here + + here {' '} to check if your DNS has been propagated successfully before clicking verify.
@@ -102,8 +105,11 @@ const CustomDomainVerify = ({ projectRef, customDomain, settings }: CustomDomain ) : (You may also visit{' '} - - here + + here {' '} to check if your DNS has been propagated successfully before clicking verify.
@@ -201,13 +207,15 @@ const CustomDomainVerify = ({ projectRef, customDomain, settings }: CustomDomainTo transfer projects, the owner must be a member of both the source and target organizations. For further information see our{' '} - - - Documentation - + + Documentation .
@@ -227,16 +230,22 @@ const TransferProjectButton = () => {The target organization needs to use{' '} - - - organization-based billing - + + organization-based billing . To migrate an organization to the new billing, head to your{' '} - - - organizations billing settings - + + organizations billing settings .
diff --git a/studio/components/interfaces/Settings/Infrastructure/InfrastructureActivity.tsx b/studio/components/interfaces/Settings/Infrastructure/InfrastructureActivity.tsx index a1029d516a..d8c4fa01f6 100644 --- a/studio/components/interfaces/Settings/Infrastructure/InfrastructureActivity.tsx +++ b/studio/components/interfaces/Settings/Infrastructure/InfrastructureActivity.tsx @@ -231,13 +231,11 @@ const InfrastructureActivity = () => { {attribute.links.map((link) => ({link.name}
-{link.name}
+{children}
)
diff --git a/studio/components/interfaces/Settings/Logs/LogsFormatters.tsx b/studio/components/interfaces/Settings/Logs/LogsFormatters.tsx
index b26a2cfd3a..28a737de33 100644
--- a/studio/components/interfaces/Settings/Logs/LogsFormatters.tsx
+++ b/studio/components/interfaces/Settings/Logs/LogsFormatters.tsx
@@ -10,7 +10,7 @@ import React from 'react'
import { IconAlertCircle, IconInfo } from 'ui'
import { isUnixMicro, unixMicroToIsoTimestamp } from '.'
-export const RowLayout: React.FC = ({ children }) => (
+export const RowLayout: React.FCNote: The{' '} - - - global upload limit - + + global upload limit {' '} takes precedence over this value ({formattedGlobalUploadLimit})
diff --git a/studio/components/interfaces/Storage/EditBucketModal.tsx b/studio/components/interfaces/Storage/EditBucketModal.tsx index 7316f8a74a..6e3bfc72e5 100644 --- a/studio/components/interfaces/Storage/EditBucketModal.tsx +++ b/studio/components/interfaces/Storage/EditBucketModal.tsx @@ -220,10 +220,11 @@ const EditBucketModal = ({ visible, bucket, onClose }: EditBucketModalProps) =>Note: The{' '} - - - global upload limit - + + global upload limit {' '} takes precedence over this value ({formattedGlobalUploadLimit})
diff --git a/studio/components/interfaces/Support/DisabledStateForFreeTier.tsx b/studio/components/interfaces/Support/DisabledStateForFreeTier.tsx index d2be8f09d0..c4a22e72d4 100644 --- a/studio/components/interfaces/Support/DisabledStateForFreeTier.tsx +++ b/studio/components/interfaces/Support/DisabledStateForFreeTier.tsx @@ -20,20 +20,18 @@ const DisabledStateForFreeTier = ({ projectRef, category }: DisabledStateForFreeUpgrade your project to the Pro plan for support in this area
+ Are you sure you want to delete {isAllRowsSelected ? 'all' : 'the selected'}{' '} + {numRows > 1 && `${numRows} `}row + {numRows > 1 && 's'}? This action cannot be undone. +
+
You will need to{' '}
-
- install
+
+ install
{' '}
the extension pgsodium first before being
able to encrypt your column.
diff --git a/studio/components/interfaces/TableGridEditor/SidePanelEditor/ColumnEditor/ColumnType.tsx b/studio/components/interfaces/TableGridEditor/SidePanelEditor/ColumnEditor/ColumnType.tsx
index 3081435412..38e3bcd073 100644
--- a/studio/components/interfaces/TableGridEditor/SidePanelEditor/ColumnEditor/ColumnType.tsx
+++ b/studio/components/interfaces/TableGridEditor/SidePanelEditor/ColumnEditor/ColumnType.tsx
@@ -184,13 +184,11 @@ const ColumnType = ({
unless you have a very specific use case.
The dashboard currently only supports importing of CSVs below 100MB.
For bulk data loading, we recommend doing so directly through the database.
- -You can create policies after you create this table.
)}
-
-
-
-
-
-
{label}
: label} + +{label}
: label} + + ) } diff --git a/studio/components/layouts/AccountLayout/WithSidebar.tsx b/studio/components/layouts/AccountLayout/WithSidebar.tsx index 385e15b473..2698722a9f 100644 --- a/studio/components/layouts/AccountLayout/WithSidebar.tsx +++ b/studio/components/layouts/AccountLayout/WithSidebar.tsx @@ -206,22 +206,20 @@ const SidebarLinkItem = ({ } return ( - - - - {isExternal && ( - -{label}
: label} + + + {isExternal && ( + +{label}
: label} - + ) } diff --git a/studio/components/layouts/AppLayout/AppHeader.tsx b/studio/components/layouts/AppLayout/AppHeader.tsx index e5cffc75cb..0ffea0c237 100644 --- a/studio/components/layouts/AppLayout/AppHeader.tsx +++ b/studio/components/layouts/AppLayout/AppHeader.tsx @@ -26,14 +26,15 @@ const AppHeader = () => { return (- {branch.name} -
- {isSelected &&+ {branch.name} +
+ {isSelected &&Manage branches
- -Manage branches
+ +- We are currently investigating a technical issue, follow status.supabase.com for updates -
-+ We are currently investigating a technical issue, follow status.supabase.com for updates +
+New organization
- -New organization
+ +New project
- -New project
+ +Browse the Supabase{' '} - - - documentation - + + documentation .
@@ -113,11 +112,9 @@ const BuildingState = () => { If your dashboard hasn't connected within 2 minutes, you can open a support ticket. - - -Have a technical issue? Contact{' '} - - - Supabase support - - + + Supabase support + {' '} or{' '} diff --git a/studio/components/layouts/ProjectLayout/LayoutHeader/HelpPopover.tsx b/studio/components/layouts/ProjectLayout/LayoutHeader/HelpPopover.tsx index 557f9d00f8..dbc51fba5d 100644 --- a/studio/components/layouts/ProjectLayout/LayoutHeader/HelpPopover.tsx +++ b/studio/components/layouts/ProjectLayout/LayoutHeader/HelpPopover.tsx @@ -1,5 +1,5 @@ import * as Tooltip from '@radix-ui/react-tooltip' -import Image from 'next/image' +import Image from 'next/legacy/image' import Link from 'next/link' import { useRouter } from 'next/router' import SVG from 'react-inlinesvg' @@ -73,38 +73,34 @@ const HelpPopover = ({ alt = false }: HelpPopoverProps) => { services.
Expected response time is based on your billing plan. Pro and Pay as You Go plans are prioritized.
{upgrade.version_to}
{upgrade.changelog_link && (Account preferences
-Unpaused projects count towards compute usage. For every hour your instance is active, we'll bill you based on the instance size of your project. See{' '} - - - Compute Instance Usage Billing - + + Compute Instance Usage Billing {' '} for more details.
@@ -145,23 +148,21 @@ const ProjectPausedState = ({ product }: ProjectPausedStateProps) => { )} {isFreePlan ? ( - - -- {name} -
- + ++ {name} +
By continuing, you agree to Supabase's{' '} - - Terms of Service + + Terms of Service {' '} and{' '} - - Privacy Policy + + Privacy Policy , and to receive periodic emails with updates.
diff --git a/studio/components/layouts/StorageLayout/BucketRow.tsx b/studio/components/layouts/StorageLayout/BucketRow.tsx index 2fc2f3c8df..9973f728da 100644 --- a/studio/components/layouts/StorageLayout/BucketRow.tsx +++ b/studio/components/layouts/StorageLayout/BucketRow.tsx @@ -45,18 +45,19 @@ const BucketRow = ({ )} > {/* Even though we trim whitespaces from bucket names, there may be some existing buckets with trailing whitespaces. */} - - -- {bucket.name} -
- {bucket.public &&+ {bucket.name} +
+ {bucket.public &&diff --git a/studio/components/layouts/StorageLayout/StorageMenu.tsx b/studio/components/layouts/StorageLayout/StorageMenu.tsx index b49ea1311c..b5c9b7d1aa 100644 --- a/studio/components/layouts/StorageLayout/StorageMenu.tsx +++ b/studio/components/layouts/StorageLayout/StorageMenu.tsx @@ -124,7 +124,7 @@ const StorageMenu = () => {
Policies
- {/* only show tooltips if required, to reduce noise */}
- {entity.name.length > 20 ? (
-
+ {/* only show tooltips if required, to reduce noise */}
+ {entity.name.length > 20 ? (
+
Duplicate Table
- - -View Policies
-View Policies
+ +
diff --git a/studio/components/to-be-cleaned/ModalsDeprecated/ConfirmModal.js b/studio/components/to-be-cleaned/ModalsDeprecated/ConfirmModal.js
deleted file mode 100644
index 20fffb585e..0000000000
--- a/studio/components/to-be-cleaned/ModalsDeprecated/ConfirmModal.js
+++ /dev/null
@@ -1,91 +0,0 @@
-import { useState } from 'react'
-import { render, unmountComponentAtNode } from 'react-dom'
-import { Button, Modal } from 'ui'
-
-function ConfirmModal({
- title,
- message: description,
- onConfirm,
- onAsyncConfirm,
- variant = 'danger',
- confirmText = 'Confirm',
-}) {
- const [loading, setLoading] = useState(false)
-
- function onCancelClick() {
- if (!loading) onClose()
- }
-
- async function onConfirmClick() {
- if (onAsyncConfirm) {
- setLoading(true)
- await onAsyncConfirm()
-
- onClose()
- } else if (onConfirm) {
- onConfirm()
- onClose()
- }
- }
-
- function onClose() {
- removeElement()
- }
-
- return (
-
{description}
-
Error: [{error?.code}] {error?.message}
diff --git a/studio/components/ui/Forms/FormHeader.tsx b/studio/components/ui/Forms/FormHeader.tsx
index 88261b2619..1e85d6b386 100644
--- a/studio/components/ui/Forms/FormHeader.tsx
+++ b/studio/components/ui/Forms/FormHeader.tsx
@@ -26,13 +26,11 @@ const FormHeader = ({
)}
{docsUrl !== undefined && (
-
-
pg_stat_statements table. Read more about{' '}
-
- examining query performance
-
+ examining query performance
.{'\n\n'}Consider resetting the analysis after optimizing any queries.
diff --git a/studio/pages/project/[ref]/settings/addons.tsx b/studio/pages/project/[ref]/settings/addons.tsx
index d8cd7e0fac..430e7d4ae7 100644
--- a/studio/pages/project/[ref]/settings/addons.tsx
+++ b/studio/pages/project/[ref]/settings/addons.tsx
@@ -20,8 +20,8 @@ const ProjectAddons: NextPageWithLayout = () => {
title="This page is only available for projects under an organization subscription"
>
You might be looking for the{' '}
-
- project's subscription
+
+ project's subscription
{' '}
page instead.
diff --git a/studio/pages/project/[ref]/settings/billing/invoices.tsx b/studio/pages/project/[ref]/settings/billing/invoices.tsx
index a07620a782..094e2bcd67 100644
--- a/studio/pages/project/[ref]/settings/billing/invoices.tsx
+++ b/studio/pages/project/[ref]/settings/billing/invoices.tsx
@@ -39,7 +39,7 @@ export default ProjectBilling
const Settings = () => {
const selectedOrganization = useSelectedOrganization()
- const orgSlug = selectedOrganization?.slug ?? ''
+ const orgSlug = selectedOrganization?.slug ?? '_'
return (