mirror of
https://github.com/supabase/supabase.git
synced 2026-10-17 07:09:07 +03:00
111 lines
4.0 KiB
TypeScript
111 lines
4.0 KiB
TypeScript
import { ScaffoldContainer, ScaffoldSection } from 'components/layouts/Scaffold'
|
|
import { FormHeader } from 'components/ui/Forms/FormHeader'
|
|
import { ButtonTooltip } from 'components/ui/ButtonTooltip'
|
|
import { Plus } from 'lucide-react'
|
|
import Table from 'components/to-be-cleaned/Table'
|
|
import { useParams } from 'common'
|
|
import { useReplicationSinksQuery } from 'data/replication/sinks-query'
|
|
import { useState } from 'react'
|
|
import CreateSinkModal from './CreateSinkModal'
|
|
import { Button } from 'ui'
|
|
import { toast } from 'sonner'
|
|
import { DeleteSinkModal } from './DeleteSinkModal'
|
|
|
|
export const ReplicationSinks = () => {
|
|
const { ref } = useParams()
|
|
const { data: sinks_data } = useReplicationSinksQuery({
|
|
projectRef: ref,
|
|
})
|
|
const [showCreateSinkModal, setShowCreateSinkModal] = useState(false)
|
|
const [showDeleteSinkModal, setShowDeleteSinkModal] = useState(false)
|
|
const [sinkIdToDelete, setSinkIdToDelete] = useState(-1)
|
|
const [sinkNameToDelete, setSinkNameToDelete] = useState('')
|
|
|
|
const sinks = sinks_data ? sinks_data.sinks : []
|
|
|
|
return (
|
|
<>
|
|
<ScaffoldContainer>
|
|
<ScaffoldSection>
|
|
<div className="col-span-12">
|
|
<FormHeader title="Sinks"></FormHeader>
|
|
<div className="space-y-4">
|
|
<div className="flex items-center gap-2 flex-wrap">
|
|
<ButtonTooltip
|
|
className="ml-auto"
|
|
icon={<Plus />}
|
|
tooltip={{
|
|
content: {
|
|
side: 'bottom',
|
|
text: 'Create a sink',
|
|
},
|
|
}}
|
|
onClick={() => setShowCreateSinkModal(true)}
|
|
>
|
|
New Sink
|
|
</ButtonTooltip>
|
|
</div>
|
|
<div className="my-4 w-full">
|
|
<Table
|
|
head={[
|
|
<Table.th key="name">Name</Table.th>,
|
|
<Table.th key="edit">Edit</Table.th>,
|
|
<Table.th key="delete">Delete</Table.th>,
|
|
]}
|
|
body={
|
|
sinks.length === 0 ? (
|
|
<Table.tr>
|
|
<Table.td align="center" colSpan={3}>
|
|
No sinks
|
|
</Table.td>
|
|
</Table.tr>
|
|
) : (
|
|
sinks.map((sink) => (
|
|
<Table.tr key={sink.name}>
|
|
<Table.td>{sink.name}</Table.td>
|
|
<Table.td>
|
|
<Button
|
|
type="default"
|
|
onClick={() => {
|
|
toast.info('Editing a sink is not yet implemented')
|
|
}}
|
|
>
|
|
Edit
|
|
</Button>
|
|
</Table.td>
|
|
<Table.td>
|
|
<Button
|
|
type="danger"
|
|
onClick={() => {
|
|
setSinkIdToDelete(sink.id)
|
|
setSinkNameToDelete(sink.name)
|
|
setShowDeleteSinkModal(true)
|
|
}}
|
|
>
|
|
Delete
|
|
</Button>
|
|
</Table.td>
|
|
</Table.tr>
|
|
))
|
|
)
|
|
}
|
|
></Table>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</ScaffoldSection>
|
|
</ScaffoldContainer>
|
|
<CreateSinkModal
|
|
visible={showCreateSinkModal}
|
|
onClose={() => setShowCreateSinkModal(false)}
|
|
/>
|
|
<DeleteSinkModal
|
|
visible={showDeleteSinkModal}
|
|
title={`Delete sink '${sinkNameToDelete}'?`}
|
|
sinkId={sinkIdToDelete}
|
|
onClose={() => setShowDeleteSinkModal(false)}
|
|
/>
|
|
</>
|
|
)
|
|
}
|