import { PermissionAction } from '@supabase/shared-types/out/constants' import { indexOf } from 'lodash' import { useEffect } from 'react' import toast from 'react-hot-toast' import { useParams } from 'common' import { useProjectContext } from 'components/layouts/ProjectLayout/ProjectContext' import { FormActions, FormPanel, FormSection, FormSectionContent, FormSectionLabel, } from 'components/ui/Forms' import { useProjectPostgrestConfigQuery } from 'data/config/project-postgrest-config-query' import { useProjectPostgrestConfigUpdateMutation } from 'data/config/project-postgrest-config-update-mutation' import { useSchemasQuery } from 'data/database/schemas-query' import { useCheckPermissions } from 'hooks' import { Form, IconAlertCircle, Input, InputNumber } from 'ui' import MultiSelect from 'ui-patterns/MultiSelect' const PostgrestConfig = () => { const { ref: projectRef } = useParams() const { project } = useProjectContext() const { data: schemas } = useSchemasQuery({ projectRef: project?.ref, connectionString: project?.connectionString, }) const { data: config, isError } = useProjectPostgrestConfigQuery({ projectRef }) const { mutate: updatePostgrestConfig, isLoading: isUpdating } = useProjectPostgrestConfigUpdateMutation({ onSuccess: () => { toast.success('Successfully saved settings') }, }) const canUpdatePostgrestConfig = useCheckPermissions( PermissionAction.UPDATE, 'custom_config_postgrest' ) const formId = 'project-postgres-config' const initialValues = { db_schema: '', max_rows: '', db_extra_search_path: '' } const updateConfig = async (updatedConfig: typeof initialValues) => { if (!projectRef) return console.error('Project ref is required') updatePostgrestConfig({ projectRef, dbSchema: updatedConfig.db_schema, maxRows: updatedConfig.max_rows, dbExtraSearchPath: updatedConfig.db_extra_search_path, }) } const permanentSchema = ['public', 'storage'] const hiddenSchema = ['auth', 'pgbouncer', 'hooks', 'extensions'] const schema = schemas ?.filter((x) => { const find = indexOf(hiddenSchema, x.name) if (find < 0) return x }) .map((x) => { return { id: x.id, value: x.name, name: x.name, disabled: indexOf(permanentSchema, x.name) >= 0 ? true : false, } }) ?? [] return (
) } export default PostgrestConfig