mirror of
https://github.com/supabase/supabase.git
synced 2026-10-15 14:19:11 +03:00
* Migrate the CreateBucketModal to use RHF. * Minor fixes for the create bucket modal. * Use the bucket type from the API everywhere. * Improve the types on some functions. Add "skip" mode to FDWCreateMutation. * Expand the CreateBucketModal to explain what will happen when creating an iceberg bucket. * Add a page for iceberg buckets. * Add error states to the iceberg explorer. * Fix the names for the FDWs. * Add a dialog for setting up namespace. * Restructure the new files. * Add a download env button. * Add warning to install the wrappers extension when creating an iceberg bucket. * Add failover details when the FDW is not setup. * Fix a lint error. * Fix a type error. * Minor fixes. * Fix the server name. * Add an icon for iceberg buckets. * Fix the import foreign schema dialog. * Make the setup wrapper button functional. * Fix a bad useMemo dependency. * Small changes to the iceberg bucket page. * Minor fix for the edit wrapper sheet. * Rename the files from kebab-case to PascalCase. * Rename the files again to include Analytic instead of Iceberg. * Rename Iceberg type to Analytic. * Add a switch for creating namespace in the import foreign schema dialog. * Fix the CreateBucketModal. * Fix the delete modal feature. * Fix the S3 keys in the FDW. * Only create a namespace if the switch is true. * Regenerate and fix the types. * Fix the FDW create mutation to handle numbers in the FDW names. * Make the icon smaller. * Check whether the namespace exists, if it doesn't create it. * Hide action from the analytic bucket which don't work. * Invalidate namespaces when creating them. * Add small explanation for the creation of namespaces. * Minor fixes. * Tons of changes to make the namespace feature work. * Fix type errors. * Fix bad import. * Minor copy fixes. * Replace the multiple cards with a table of namespaces. * update copy icon * tiny copy update * Fix the empty state for foreign tables. * Hide the analytics bucket option for self-hosted. * Minor copy fixes. * Expand the CTA on no namespaces state. * More minor fixes. * More small fixes. --------- Co-authored-by: Alaister Young <a@alaisteryoung.com>
79 lines
2.5 KiB
TypeScript
79 lines
2.5 KiB
TypeScript
import { useMutation, UseMutationOptions, useQueryClient } from '@tanstack/react-query'
|
|
import { toast } from 'sonner'
|
|
|
|
import { entityTypeKeys } from 'data/entity-types/keys'
|
|
import { foreignTableKeys } from 'data/foreign-tables/keys'
|
|
import { executeSql } from 'data/sql/execute-sql-query'
|
|
import { wrapWithTransaction } from 'data/sql/utils/transaction'
|
|
import { vaultSecretsKeys } from 'data/vault/keys'
|
|
import type { ResponseError } from 'types'
|
|
import { fdwKeys } from './keys'
|
|
|
|
export type FDWImportForeignSchemaVariables = {
|
|
projectRef?: string
|
|
connectionString?: string | null
|
|
serverName: string
|
|
sourceSchema: string
|
|
targetSchema: string
|
|
}
|
|
|
|
export function getImportForeignSchemaSql({
|
|
serverName,
|
|
sourceSchema,
|
|
targetSchema,
|
|
}: Pick<FDWImportForeignSchemaVariables, 'serverName' | 'sourceSchema' | 'targetSchema'>) {
|
|
const sql = /* SQL */ `
|
|
import foreign schema "${sourceSchema}" from server ${serverName} into ${targetSchema};
|
|
`
|
|
return sql
|
|
}
|
|
|
|
export async function importForeignSchema({
|
|
projectRef,
|
|
connectionString,
|
|
...rest
|
|
}: FDWImportForeignSchemaVariables) {
|
|
const sql = wrapWithTransaction(getImportForeignSchemaSql(rest))
|
|
const { result } = await executeSql({ projectRef, connectionString, sql })
|
|
return result
|
|
}
|
|
|
|
type ImportForeignSchemaData = Awaited<ReturnType<typeof importForeignSchema>>
|
|
|
|
export const useFDWImportForeignSchemaMutation = ({
|
|
onSuccess,
|
|
onError,
|
|
...options
|
|
}: Omit<
|
|
UseMutationOptions<ImportForeignSchemaData, ResponseError, FDWImportForeignSchemaVariables>,
|
|
'mutationFn'
|
|
> = {}) => {
|
|
const queryClient = useQueryClient()
|
|
|
|
return useMutation<ImportForeignSchemaData, ResponseError, FDWImportForeignSchemaVariables>(
|
|
(vars) => importForeignSchema(vars),
|
|
{
|
|
async onSuccess(data, variables, context) {
|
|
const { projectRef } = variables
|
|
|
|
await Promise.all([
|
|
queryClient.invalidateQueries(fdwKeys.list(projectRef), { refetchType: 'all' }),
|
|
queryClient.invalidateQueries(entityTypeKeys.list(projectRef)),
|
|
queryClient.invalidateQueries(foreignTableKeys.list(projectRef)),
|
|
queryClient.invalidateQueries(vaultSecretsKeys.list(projectRef)),
|
|
])
|
|
|
|
await onSuccess?.(data, variables, context)
|
|
},
|
|
async onError(data, variables, context) {
|
|
if (onError === undefined) {
|
|
toast.error(`Failed to import schema for foreign data wrapper: ${data.message}`)
|
|
} else {
|
|
onError(data, variables, context)
|
|
}
|
|
},
|
|
...options,
|
|
}
|
|
)
|
|
}
|