mirror of
https://github.com/supabase/supabase.git
synced 2026-10-13 13:19:09 +03:00
* Initial work on vector buckets. * Add more queries and UI. * chore(studio): vector buckets contents (#39705) * language * match analytics buckets * shared empty state * proper loading state * create dialog cleanup * simplify copywriting * proper details * filtering * use real data * chore(studio): vector buckets polish A (#39759) * empty state * better checks * bucket name in sheet * fix typo * sheet improvements * rename vector index to vector table * cleanup * More work on the vector indexes. * Add delete for bucket and indexes. Create index should now work. * chore(studio): vector buckets polish B (#39794) * loading * delete modal * fix modal behaviour * Add modal for deleting vector buckets. * Bring back the shimmering loader. * chore(studio): vector buckets polish C (#39887) * fix bucketname on deletion dialog * empty states * remove extraneous padding * proper loading and not-found cases * Minor fixes. * Minor updates to the vector components. * Add more instructions to the cursor rules. * Some refactors and shifting files around * Refactor analytics buckets detial to improve time to fcp * Fix * Refactors + simplify * Last few nits, just leaving comments * If the bucket is not empty, delete all indexes first. --------- Co-authored-by: Danny White <3104761+dnywh@users.noreply.github.com> Co-authored-by: Joshen Lim <joshenlimek@gmail.com>
80 lines
3.0 KiB
TypeScript
80 lines
3.0 KiB
TypeScript
import { PermissionAction } from '@supabase/shared-types/out/constants'
|
|
|
|
import { WRAPPERS } from 'components/interfaces/Integrations/Wrappers/Wrappers.constants'
|
|
import {
|
|
getAnalyticsBucketFDWName,
|
|
getAnalyticsBucketS3KeyName,
|
|
} from 'components/interfaces/Storage/AnalyticsBuckets/AnalyticsBucketDetails/AnalyticsBucketDetails.utils'
|
|
import {
|
|
getCatalogURI,
|
|
getConnectionURL,
|
|
} from 'components/interfaces/Storage/StorageSettings/StorageSettings.utils'
|
|
import { getKeys, useAPIKeysQuery } from 'data/api-keys/api-keys-query'
|
|
import { useProjectSettingsV2Query } from 'data/config/project-settings-v2-query'
|
|
import { FDWCreateVariables, useFDWCreateMutation } from 'data/fdw/fdw-create-mutation'
|
|
import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions'
|
|
import { useSelectedProjectQuery } from 'hooks/misc/useSelectedProject'
|
|
import { useS3AccessKeyCreateMutation } from './s3-access-key-create-mutation'
|
|
|
|
export const useIcebergWrapperCreateMutation = () => {
|
|
const { data: project } = useSelectedProjectQuery()
|
|
|
|
const { data: apiKeys } = useAPIKeysQuery({ projectRef: project?.ref, reveal: true })
|
|
const { secretKey, serviceKey } = getKeys(apiKeys)
|
|
|
|
const { data: settings } = useProjectSettingsV2Query({ projectRef: project?.ref })
|
|
const protocol = settings?.app_config?.protocol ?? 'https'
|
|
const endpoint = settings?.app_config?.storage_endpoint || settings?.app_config?.endpoint
|
|
|
|
const apiKey = secretKey?.api_key ?? serviceKey?.api_key ?? 'SUPABASE_CLIENT_API_KEY'
|
|
|
|
const wrapperMeta = WRAPPERS.find((wrapper) => wrapper.name === 'iceberg_wrapper')
|
|
|
|
const { can: canCreateCredentials } = useAsyncCheckPermissions(
|
|
PermissionAction.STORAGE_ADMIN_WRITE,
|
|
'*'
|
|
)
|
|
|
|
const { mutateAsync: createS3AccessKey, isLoading: isCreatingS3AccessKey } =
|
|
useS3AccessKeyCreateMutation()
|
|
|
|
const { mutateAsync: createFDW, isLoading: isCreatingFDW } = useFDWCreateMutation()
|
|
|
|
const mutateAsync = async ({ bucketName }: { bucketName: string }) => {
|
|
const createS3KeyData = await createS3AccessKey({
|
|
projectRef: project?.ref,
|
|
description: getAnalyticsBucketS3KeyName(bucketName),
|
|
})
|
|
|
|
const wrapperName = getAnalyticsBucketFDWName(bucketName)
|
|
|
|
const params: FDWCreateVariables = {
|
|
projectRef: project?.ref,
|
|
connectionString: project?.connectionString,
|
|
wrapperMeta: wrapperMeta!,
|
|
formState: {
|
|
wrapper_name: wrapperName,
|
|
server_name: `${wrapperName}_server`,
|
|
vault_aws_access_key_id: createS3KeyData?.access_key,
|
|
vault_aws_secret_access_key: createS3KeyData?.secret_key,
|
|
vault_token: apiKey,
|
|
warehouse: bucketName,
|
|
's3.endpoint': getConnectionURL(project?.ref ?? '', protocol, endpoint),
|
|
catalog_uri: getCatalogURI(project?.ref ?? '', protocol, endpoint),
|
|
},
|
|
mode: 'skip',
|
|
tables: [],
|
|
sourceSchema: '',
|
|
targetSchema: '',
|
|
}
|
|
|
|
await createFDW(params)
|
|
}
|
|
|
|
return {
|
|
mutateAsync,
|
|
isLoading: isCreatingFDW || isCreatingS3AccessKey,
|
|
hasPermission: canCreateCredentials,
|
|
}
|
|
}
|