Files
supabase/apps/www/pages/database/Database.tsx
T
8057309e51 chore: upgrade next 13 + react 18 (#17839)
* update deps + image codemod (studio)

* update next links (studio)

* update deps

* update links (ui)

* remove next-transpile-modules

* move next-themes dependency

* chore: update ConfirmDialog

* chore: remove old ConfirmModal js file. migrated to TS

* dependency wrangling

* remove empty page

* update next links (www)

* First run bump react-data-grid-v7 beta 4

* fix package-lock.json

* more deps wrangling

* update recharts

* update sentry options

* fix some broken things in www

* studio fixes

* fix graphiql

* fix studio build

* fix menu hydration

* small build error

* update turbo

* fix www typescript errors

* docs image codemod

* links codemod docs

* fix docs typescript errors

* move useConsent to ui to prevent circular deps

* Fix links

* Fix homepage

* Fix links

* move studio/ to apps/

* Revert "move studio/ to apps/"

This reverts commit 1b0a985fcb.

* disable outputFileTracingRoot

* remove outputFileTracingRoot

* fix homepage product cards

* fix PrivacySettings links

* Fix links

* Fix the build for www.

* Minor fixes for JWTGenerator.

* Fix the docs and ui tests.

* Revert codehike back to 0.8.3

* remove ConfirmAlert()

* reenable babel because mobx hates me

* fix blog image and comparison page avatar

* Fix svg errors

* update image synthax

* Fix code hike

* Move the button in a div so that it doesn't inherit its parent height and make the button look weird.

* When components are defined in a component, they get recreated on each render. This makes them unstable in certain cases and causes infinite rerenders.

* Replace the next/head usage with next/script.

* Chore/upgrade next 13 fix table editor (#18431)

* fix table editor styling and fix row deletion logic

* Fix deleting selected rows from header, and fix checkboxes not clearing up

* Fix deleting all rows when filter applied, and fix deleting all rows

* Fix grid size styling issue

* Fix TS error

* Hydration errors

* studio org pages fixes

* fix more studio links

* audit logs fixes

* dropdown icon styling fixes

* fix some images in www

* upgrade to next 14

* try new sentry wrapper for api

* see if this is even invoked

* Revert "see if this is even invoked"

This reverts commit 86c3973ffa.

* Revert "try new sentry wrapper for api"

This reverts commit f67623ebad.

* Revert "upgrade to next 14"

This reverts commit a24dd6131e.

* chore: allow node version 19/20

* Try to fix the LogTable so that it renders with the newer "react-data-grid" version.

* Fix type errors in the log renderer code.

* Fix the replication screen.

* Add the CSS for the GraphiQL.

* Fix SQL editor results rendering

* Lint

* Fix SQL editor results height issue

* Fix auth RLS not invalidating RQ when toggling RLS

* Fix database tables new/edit column regressed

* Fix migrations page empty state if migrations schema not yet created

* Fix API side panel docs temp remove postgrest text for column description PK and FK

* Fix + improve timeout handling in SQL editor

---------

Co-authored-by: Jonathan Summers-Muir <MildTomato@users.noreply.github.com>
Co-authored-by: Joshen Lim <joshenlimek@gmail.com>
Co-authored-by: Francesco Sansalvadore <f.sansalvadore@gmail.com>
Co-authored-by: Terry Sutton <saltcod@gmail.com>
Co-authored-by: Ivan Vasilov <vasilov.ivan@gmail.com>
Co-authored-by: Kevin Grüneberg <k.grueneberg1994@gmail.com>
2023-10-31 05:51:46 +00:00

318 lines
12 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import { Badge, Button, IconArrowUpRight, IconX, Tabs } from 'ui'
// data
import ApiExamplesData from 'data/products/database/api-examples'
import ExtensionsExamplesData from 'data/products/database/extensions-examples'
import SqlViewCarouselData from 'data/products/database/sql-view-carousel.json'
import TableViewCarouselData from 'data/products/database/table-view-carousel.json'
import Solutions from 'data/Solutions'
import { NextSeo } from 'next-seo'
import Image from 'next/image'
import Link from 'next/link'
import { useRouter } from 'next/router'
import { useState } from 'react'
import { Swiper, SwiperSlide } from 'swiper/react'
// Import Swiper styles
import 'swiper/swiper.min.css'
import ImageCarousel from '~/components/Carousels/ImageCarousel'
import SplitCodeBlockCarousel from '~/components/Carousels/SplitCodeBlockCarousel'
import FeatureColumn from '~/components/FeatureColumn'
import FloatingIcons from '~/components/FloatingIcons'
import DefaultLayout from '~/components/Layouts/Default'
import SectionContainer from '~/components/Layouts/SectionContainer'
import ProductIcon from '~/components/ProductIcon'
import APISection from '~/components/Sections/APISection'
import GithubExamples from '~/components/Sections/GithubExamples'
import ProductHeader from '~/components/Sections/ProductHeader'
import { TweetCard } from 'ui'
// install Swiper's Controller component
// SwiperCore.use([Controller])
function Database() {
// base path for images
const { basePath } = useRouter()
const [dashboardSwiper, setDashboardSwiper] = useState(undefined)
const [dashboardSwiperActiveIndex, setDashboardSwiperActiveIndex] = useState(0)
function handleDashboardSwiperNav(e: number) {
setDashboardSwiperActiveIndex(e)
// @ts-ignore
dashboardSwiper.slideTo(e)
}
const meta_title = 'Database | Open source SQL Database'
const meta_description =
'With supabase’s APIs and easy to use dashboard, it makes designing relational databases easy.'
return (
<>
<NextSeo
title={meta_title}
description={meta_description}
openGraph={{
title: meta_title,
description: meta_description,
url: `https://supabase.com/database`,
images: [
{
url: `https://supabase.com${basePath}/images/product/database/database-og.jpg`,
},
],
}}
/>
<DefaultLayout>
<ProductHeader
icon={Solutions['database'].icon}
title={Solutions['database'].name}
h1={[
<span key={'database-h1'}>
Open Source SQL Database
<br /> (without the hassle)
</span>,
]}
subheader={[
'Every Supabase project is a dedicated PostgreSQL database, trusted by millions of developers.',
'PostgreSQL is one of the worlds most scalable databases.',
]}
image={[
<div className="header--light block w-full" key="light">
<Image
src={`${basePath}/images/product/database/header--light-2.png`}
alt="database header"
layout="responsive"
width="1680"
height="1116"
/>
</div>,
<div className="header--dark mr-0 w-full dark:block" key="dark">
<Image
src={`${basePath}/images/product/database/header--dark-2.png`}
alt="database header"
layout="responsive"
width="1680"
height="1116"
/>
</div>,
]}
documentation_url={'/docs/guides/database'}
/>
<SectionContainer>
<div className="grid grid-cols-12">
<div className="col-span-12 mb-10 lg:col-span-3 lg:mb-0">
<div className="p mb-4 flex items-center space-x-2">
<ProductIcon icon={Solutions['database'].icon} />
<IconX />
<div className="flex w-fit items-center">
<Image
src={`${basePath}/images/product/database/postgresql-icon.svg`}
width={30}
height={30}
alt="postgresql icon"
/>
</div>
</div>
<h4 className="h4">Just Postgres</h4>
<p className="p">Every Supabase project is a dedicated Postgres database.</p>
<p className="p text-sm">
100% portable. Bring your existing Postgres database, or migrate away at any time.
</p>
</div>
<div className="col-span-12 mb-10 lg:col-span-3 lg:col-start-5 lg:mb-0">
<div className="p mb-4 flex items-center space-x-2">
<ProductIcon icon={Solutions['database'].icon} />
<IconX />
<ProductIcon icon={Solutions['authentication'].icon} />
</div>
<h4 className="h4">Built-in Auth</h4>
<p className="p">Leveraging PostgreSQL's proven Row Level Security.</p>
<p className="p text-sm">
Integrated with JWT authentication which controls exactly what your users can
access.
</p>
</div>
<div className="col-span-12 lg:col-span-3 lg:col-start-9">
<div className="p mb-4 flex items-center space-x-2">
<ProductIcon icon={Solutions['database'].icon} />
<IconX />
<ProductIcon icon={'M13 10V3L4 14h7v7l9-11h-7z'} />
</div>
<h4 className="h4">Realtime enabled</h4>
<p className="p">Data-change listeners over websockets.</p>
<p className="p text-sm">
Subscribe and react to database changes, milliseconds after they happen.
</p>
</div>
</div>
</SectionContainer>
{/* <SectionContainer>÷ */}
<SectionContainer className="text-center md:pb-0 lg:pb-0">
<div className="grid grid-cols-12">
<div className="col-span-12 lg:col-span-8 lg:col-start-3">
<h2 className="h3">Easy to use dashboard</h2>
<p className="p">
The simplicity of a Table Editor, or the power of a SQL editor. Your choice.
</p>
</div>
</div>
</SectionContainer>
<div className="grid">
<div className={'dashboard-tabs sbui-tabs--underline-alt'}>
<Tabs
size="xlarge"
activeId={dashboardSwiperActiveIndex.toString()}
onChange={(e: string) => handleDashboardSwiperNav(Number(e))}
type="underlined"
tabBarStyle={{
marginBottom: 0,
// borderBottom: '1px solid #dedede',
}}
// block
>
<Tabs.Panel id="0" label="Table editor">
<span></span>
</Tabs.Panel>
<Tabs.Panel id="1" label="SQL editor">
<span></span>
</Tabs.Panel>
</Tabs>
</div>
</div>
<Swiper
// @ts-ignore
onSwiper={setDashboardSwiper}
style={{ overflow: 'hidden' }}
initialSlide={0}
spaceBetween={0}
slidesPerView={1}
speed={300}
allowTouchMove={false}
>
<div className="grid grid-cols-12">
<SwiperSlide key={0}>
<SectionContainer className="pt-16 pb-0">
<ImageCarousel
content={TableViewCarouselData}
footer={[
<TweetCard
handle="@Elsolo244"
key="@Elsolo244"
img_url={`${basePath}/images/twitter-profiles/v6citnk33y2wpeyzrq05_400x400.jpeg`}
quote="Where has @supabase been all my life? 😍"
/>,
]}
/>
</SectionContainer>
</SwiperSlide>
<SwiperSlide key={1}>
<SectionContainer className="pt-16 pb-0">
<ImageCarousel
content={SqlViewCarouselData}
footer={[
<TweetCard
handle="@jim_bisenius"
key="@jim_bisenius"
img_url={`${basePath}/images/twitter-profiles/rLgwUZSB_400x400.jpg`}
quote="@MongoDB or @MySQL?!?! Please, let me introduce you to @supabase and the wonderful world of @PostgreSQL before it's too late!!"
/>,
]}
/>
</SectionContainer>
</SwiperSlide>
</div>
</Swiper>
<SectionContainer className="-mb-48">
<APISection
// @ts-ignore
content={ApiExamplesData}
title="Never write an API again"
text={[
<p key={0}>
We introspect your database and provide instant APIs. Focus on building your
product, while Supabase handles the CRUD.
</p>,
]}
footer={[
<div className="grid grid-cols-12" key={0}>
<div className="col-span-12 mt-0 flex lg:col-span-6 xl:col-span-12 xl:mb-8">
<p>
<p className="text-light m-0">Libraries coming soon:</p>
</p>
<div className="ml-1 space-x-1">
<Badge dot={false}>Python</Badge>
<Badge dot={false}>Dart</Badge>
<Badge dot={false}>C#</Badge>
<Badge dot={false}>Kotlin</Badge>
</div>
</div>
<div className="col-span-12 hidden lg:col-span-6 xl:col-span-10 xl:block" key={1}>
{/* <TweetCard
handle="@eunjae_lee"
img_url="https://pbs.twimg.com/profile_images/1188191474401320965/eGjSYbQd_400x400.jpg"
quote="So they just help me use @PostgreSQL better. They don't try to invent a wheel and trap me
in it. Whereas they provide a good abstraction overall, they also provide a raw access to
the database."
/> */}
</div>
</div>,
]}
documentation_link={'/docs/guides/database'}
/>
</SectionContainer>
<div className="relative">
<div className="section--masked">
<div className="section--bg-masked">
<div className="section--bg border-t border-b border-gray-100 dark:border-gray-600"></div>
</div>
<div className="section-container pt-12 pb-0">
<FloatingIcons />
<div className="overflow-x-hidden">
<SectionContainer className="mb-0 pb-8 lg:pt-32">
<GithubExamples />
</SectionContainer>
</div>
</div>
</div>
</div>
<SectionContainer className="lg:py-48">
<div className="grid grid-cols-12 lg:gap-16">
<div className="col-span-12 mb-8 lg:col-span-6 xl:col-span-5">
<h2 className="h3">Extend your database</h2>
<p className="p">Supabase works natively with Postgres extensions.</p>
<p className="p">
Choose from a huge collection of Postgres extensions, enabled with a single click.
</p>
<FeatureColumn
title="40+ preinstalled extensions"
text="We only show a few of the extensions supported by Supabase here, but we preinstall many more that you can use right away."
/>
<Button asChild size="small" type="default" icon={<IconArrowUpRight />}>
<Link href="/docs/guides/database">Explore documentation</Link>
</Button>
</div>
<div className="col-span-12 mt-8 lg:col-span-6 lg:col-start-7 lg:mt-0">
<SplitCodeBlockCarousel
// @ts-ignore
content={ExtensionsExamplesData}
/>
</div>
</div>
</SectionContainer>
</DefaultLayout>
</>
)
}
export default Database