mirror of
https://github.com/supabase/supabase.git
synced 2026-10-18 15:49:09 +03:00
Merge branch 'master' of github.com:supabase/supabase
This commit is contained in:
commit
973e1ebcb8
16 files changed
+51
-59
No files matched your search
@@ -102,7 +102,8 @@ export const Grid = memo(
|
||||
const selectedCellRef = useRef<{ rowIdx: number; row: any; column: any } | null>(null)
|
||||
|
||||
function copyCellValue() {
|
||||
const selectedCellValue = selectedCellRef.current?.row[selectedCellRef.current?.column?.key]
|
||||
const selectedCellValue =
|
||||
selectedCellRef.current?.row?.[selectedCellRef.current?.column?.key]
|
||||
const text = formatClipboardValue(selectedCellValue)
|
||||
if (!text) return
|
||||
copyToClipboard(text)
|
||||
|
||||
@@ -7,7 +7,7 @@ export function deepClone(obj: unknown) {
|
||||
}
|
||||
|
||||
export function formatClipboardValue(value: any) {
|
||||
if (value === null) return ''
|
||||
if (!value) return ''
|
||||
if (typeof value == 'object' || Array.isArray(value)) {
|
||||
return JSON.stringify(value)
|
||||
}
|
||||
|
||||
@@ -71,7 +71,7 @@ const ProjectList = ({ search, rewriteHref }: ProjectListProps) => {
|
||||
{organizations?.map((organization) => {
|
||||
return (
|
||||
<OrganizationProjects
|
||||
key={organization.id}
|
||||
key={organization.slug}
|
||||
organization={organization}
|
||||
projects={projectsByOrg[organization.id]}
|
||||
overdueInvoices={(allOverdueInvoices ?? []).filter(
|
||||
@@ -163,7 +163,7 @@ const OrganizationProjects = ({
|
||||
if (search.length > 0 && filteredProjects.length === 0) return null
|
||||
|
||||
return (
|
||||
<div className="space-y-3" key={organization.id}>
|
||||
<div className="space-y-3" key={organization.slug}>
|
||||
<div className="flex space-x-4 items-center">
|
||||
<h4 className="text-lg flex items-center">{organization.name}</h4>
|
||||
|
||||
|
||||
@@ -29,7 +29,6 @@ import {
|
||||
} from 'ui'
|
||||
|
||||
export interface Project {
|
||||
id: string
|
||||
name: string
|
||||
ref: string
|
||||
}
|
||||
|
||||
@@ -168,6 +168,16 @@ export const lintInfoMap: LintInfo[] = [
|
||||
docsLink:
|
||||
'https://supabase.com/docs/guides/database/database-advisors?lint=0016_materialized_view_in_api',
|
||||
},
|
||||
{
|
||||
name: 'foreign_table_in_api',
|
||||
title: 'Foreign Table in API',
|
||||
icon: <Table2 className="text-foreground-muted" size={15} strokeWidth={1.5} />,
|
||||
link: () =>
|
||||
`https://supabase.com/docs/guides/database/database-linter?lint=0017_foreign_table_in_api`,
|
||||
linkText: 'View docs',
|
||||
docsLink:
|
||||
'https://supabase.com/docs/guides/database/database-linter?lint=0017_foreign_table_in_api',
|
||||
},
|
||||
]
|
||||
|
||||
export const LintCTA = ({
|
||||
|
||||
+1
-1
@@ -94,7 +94,7 @@ const DowngradeModal = ({
|
||||
{projects
|
||||
.filter((it) => it.infra_compute_size === 'micro')
|
||||
.map((project) => (
|
||||
<li className="list-disc ml-6" key={project.id}>
|
||||
<li className="list-disc ml-6" key={project.ref}>
|
||||
{project.name}: Compute will be downgraded. Project will also{' '}
|
||||
<span className="font-bold">need to be restarted</span>.
|
||||
</li>
|
||||
|
||||
+1
-2
@@ -54,8 +54,7 @@ const SidePanelGitHubRepoLinker = ({ projectRef }: SidePanelGitHubRepoLinkerProp
|
||||
() =>
|
||||
supabaseProjectsData
|
||||
?.filter((project) => project.organization_id === selectedOrganization?.id)
|
||||
.map((project) => ({ id: project.id.toString(), name: project.name, ref: project.ref })) ??
|
||||
EMPTY_ARR,
|
||||
.map((project) => ({ name: project.name, ref: project.ref })) ?? EMPTY_ARR,
|
||||
[selectedOrganization?.id, supabaseProjectsData]
|
||||
)
|
||||
|
||||
|
||||
+1
-2
@@ -52,8 +52,7 @@ const SidePanelVercelProjectLinker = () => {
|
||||
() =>
|
||||
supabaseProjectsData
|
||||
?.filter((project) => project.organization_id === selectedOrganization?.id)
|
||||
.map((project) => ({ id: project.id.toString(), name: project.name, ref: project.ref })) ??
|
||||
EMPTY_ARR,
|
||||
.map((project) => ({ name: project.name, ref: project.ref })) ?? EMPTY_ARR,
|
||||
[selectedOrganization?.id, supabaseProjectsData]
|
||||
)
|
||||
|
||||
|
||||
@@ -18,9 +18,6 @@ const OrganizationSettingsMenu = () => {
|
||||
{ label: 'Legal Documents', pathname: `/org/[slug]/documents` },
|
||||
]
|
||||
|
||||
// const { data: allProjects } = useProjectsQuery()
|
||||
// const projects = allProjects?.filter((project) => project.organization_id === organization?.id)
|
||||
|
||||
return (
|
||||
<div className="space-y-10">
|
||||
<div className="space-y-2">
|
||||
@@ -36,25 +33,6 @@ const OrganizationSettingsMenu = () => {
|
||||
/>
|
||||
))}
|
||||
</div>
|
||||
|
||||
{/* [Joshen] Hiding below until we figure out a better UX for consolidating settings on projects */}
|
||||
{/* <div className="space-y-2">
|
||||
<p className="text-sm font-medium">Projects</p>
|
||||
<Accordion_Shadcn_ type="single" collapsible className="w-full">
|
||||
{projects?.map((project) => (
|
||||
<ProjectSettingsMenuItem key={project.ref} project={project} />
|
||||
))}
|
||||
</Accordion_Shadcn_>
|
||||
</div>
|
||||
<div>
|
||||
<Link href={`/new/${organization?.slug}`}>
|
||||
<a>
|
||||
<Button type="default" size="small">
|
||||
Create new project
|
||||
</Button>
|
||||
</a>
|
||||
</Link>
|
||||
</div> */}
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
@@ -180,7 +180,7 @@ const APIAuthorizationPage: NextPageWithLayout = () => {
|
||||
>
|
||||
{(organizations ?? []).map((organization) => (
|
||||
<Listbox.Option
|
||||
key={organization.id}
|
||||
key={organization.slug}
|
||||
label={organization.name}
|
||||
value={organization.slug}
|
||||
>
|
||||
|
||||
@@ -65,8 +65,7 @@ const VercelIntegration: NextPageWithLayout = () => {
|
||||
project.status === PROJECT_STATUS['COMING_UP'] ||
|
||||
project.status === PROJECT_STATUS['RESTORING'])
|
||||
)
|
||||
.map((project) => ({ id: project.id.toString(), name: project.name, ref: project.ref })) ??
|
||||
EMPTY_ARR,
|
||||
.map((project) => ({ name: project.name, ref: project.ref })) ?? EMPTY_ARR,
|
||||
[organization?.id, supabaseProjectsData]
|
||||
)
|
||||
|
||||
|
||||
@@ -812,7 +812,7 @@ const Wizard: NextPageWithLayout = () => {
|
||||
</TableHeader>
|
||||
<TableBody className="[&_td]:py-2">
|
||||
{organizationProjects.map((project) => (
|
||||
<TableRow key={project.id} className="text-foreground-light">
|
||||
<TableRow key={project.ref} className="text-foreground-light">
|
||||
<TableCell className="w-[170px]">{project.name}</TableCell>
|
||||
<TableCell className="text-center">
|
||||
{instanceLabel(project.infra_compute_size)}
|
||||
|
||||
@@ -42,6 +42,8 @@ Sentry.init({
|
||||
ignoreErrors: [
|
||||
// Used exclusively in Monaco Editor.
|
||||
'ResizeObserver',
|
||||
's.getModifierState is not a function',
|
||||
/^Uncaught NetworkError: Failed to execute 'importScripts' on 'WorkerGlobalScope'/,
|
||||
// [Joshen] We currently use stripe-js for customers to save their credit card data
|
||||
// I'm unable to reproduce this error on local, staging nor prod across chrome, safari or firefox
|
||||
// Based on https://github.com/stripe/stripe-js/issues/26, it seems like this error is safe to ignore,
|
||||
|
||||
@@ -5,7 +5,7 @@ import ProductIcon from '../ProductIcon'
|
||||
type subheader = string
|
||||
interface Types {
|
||||
h1: string | React.ReactNode
|
||||
subheader: string[]
|
||||
subheader: (string | React.ReactNode)[]
|
||||
icon?: string
|
||||
title?: string
|
||||
image?: React.ReactNode
|
||||
|
||||
@@ -26,7 +26,7 @@ function StoragePage() {
|
||||
|
||||
const meta_title = 'Storage | Store any digital content'
|
||||
const meta_description =
|
||||
'An open source Object store with unlimited scalability, for any file type.'
|
||||
'An open source S3 Compatible Object Store with unlimited scalability, for any file type.'
|
||||
|
||||
return (
|
||||
<>
|
||||
@@ -56,7 +56,10 @@ function StoragePage() {
|
||||
</span>,
|
||||
]}
|
||||
subheader={[
|
||||
'An open source Object store with unlimited scalability, for any file type.',
|
||||
<>
|
||||
An open source <b>S3 Compatible</b> Object Store, with unlimited scalability, for any
|
||||
file type.
|
||||
</>,
|
||||
'With custom policies and permissions that are familiar and easy to implement.',
|
||||
]}
|
||||
image={[
|
||||
@@ -86,7 +89,6 @@ function StoragePage() {
|
||||
</div>
|
||||
|
||||
<h4 className="h4">Interoperable</h4>
|
||||
|
||||
<p className="p">
|
||||
Integrates well with the rest of Supabase ecosystem, including Auth and Postgres.
|
||||
</p>
|
||||
@@ -112,8 +114,11 @@ function StoragePage() {
|
||||
}
|
||||
/>
|
||||
</div>
|
||||
<h4 className="h4">Dependable</h4>
|
||||
<p className="p">Enterprise-level scalability and durability.</p>
|
||||
<h4 className="h4">Multiple Protocol Support</h4>
|
||||
|
||||
<p className="p">
|
||||
S3, Resumable Uploads and Standard Uploads. Enterprise-level scalability.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</SectionContainer>
|
||||
|
||||
Generated
+17
-17
@@ -13947,9 +13947,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@testing-library/jest-dom": {
|
||||
"version": "6.4.2",
|
||||
"resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-6.4.2.tgz",
|
||||
"integrity": "sha512-CzqH0AFymEMG48CpzXFriYYkOjk6ZGPCLMhW9e9jg3KMCn5OfJecF8GtGW7yGfR/IgCe3SX8BSwjdzI6BBbZLw==",
|
||||
"version": "6.4.5",
|
||||
"resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-6.4.5.tgz",
|
||||
"integrity": "sha512-AguB9yvTXmCnySBP1lWjfNNUwpbElsaQ567lt2VdGqAdHtpieLgjmcVyv1q7PMIvLbgpDdkWV5Ydv3FEejyp2A==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@adobe/css-tools": "^4.3.2",
|
||||
@@ -13958,7 +13958,7 @@
|
||||
"chalk": "^3.0.0",
|
||||
"css.escape": "^1.5.1",
|
||||
"dom-accessibility-api": "^0.6.3",
|
||||
"lodash": "^4.17.15",
|
||||
"lodash": "^4.17.21",
|
||||
"redent": "^3.0.0"
|
||||
},
|
||||
"engines": {
|
||||
@@ -15322,6 +15322,19 @@
|
||||
"vite": "^4.2.0 || ^5.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@vitest/expect": {
|
||||
"version": "1.6.0",
|
||||
"resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-1.6.0.tgz",
|
||||
"integrity": "sha512-ixEvFVQjycy/oNgHjqsL6AZCDduC+tflRluaHIzKIsdbzkLn2U/iBnVeJwB6HsIjQBdfMR8Z0tRxKUsvFJEeWQ==",
|
||||
"dependencies": {
|
||||
"@vitest/spy": "1.6.0",
|
||||
"@vitest/utils": "1.6.0",
|
||||
"chai": "^4.3.10"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://opencollective.com/vitest"
|
||||
}
|
||||
},
|
||||
"node_modules/@vitest/runner": {
|
||||
"version": "1.6.0",
|
||||
"resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-1.6.0.tgz",
|
||||
@@ -41740,19 +41753,6 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"node_modules/vitest/node_modules/@vitest/expect": {
|
||||
"version": "1.6.0",
|
||||
"resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-1.6.0.tgz",
|
||||
"integrity": "sha512-ixEvFVQjycy/oNgHjqsL6AZCDduC+tflRluaHIzKIsdbzkLn2U/iBnVeJwB6HsIjQBdfMR8Z0tRxKUsvFJEeWQ==",
|
||||
"dependencies": {
|
||||
"@vitest/spy": "1.6.0",
|
||||
"@vitest/utils": "1.6.0",
|
||||
"chai": "^4.3.10"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://opencollective.com/vitest"
|
||||
}
|
||||
},
|
||||
"node_modules/vitest/node_modules/execa": {
|
||||
"version": "8.0.1",
|
||||
"resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz",
|
||||
|
||||
Reference in new issue
Block a user